我将SpringBoot 1.3.5升级到1.5.2 RELEASE,当我的bean被连接时突然出现错误 . 我没有在任何地方进行构造函数注入,因此循环引用没有任何意义 .

这是我的主要课程:

@EnableGlobalMethodSecurity(securedEnabled = true)
@SpringBootApplication
public class MyApplication extends WebMvcConfigurerAdapter  {
  ...
}

我在/src/java/../configuration/中有很多@Configuration类,比如

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private CustomUserDetailsService customUserDetailsService;

    @Bean
    public PasswordEncoder passwordEncoder() {
        // default strength = 10
        return new BCryptPasswordEncoder();
    }
...
}

@Configuration
@ComponentScan()
public class MyApplicationConfiguration {
@Bean
    @Order(Ordered.HIGHEST_PRECEDENCE)
    public EmbeddedServletContainerCustomizer servletContainerCustomizer() {
        return new SessionTimeoutEmbeddedServletContainerCustomizer();
    }
...
}

我也有一个确实使用passwordEncoder的CustomUserDetailsService,但它之前从未出现过问题:

@Component
public class CustomUserDetailsService implements UserDetailsService {

    @Autowired
    private UserService userService;

    @Autowired
    private UserRepository userRepository;

    @Autowired
    private PasswordEncoder passwordEncoder;

    @Autowired
    private PasswordResetTokenRepository passwordTokenRepository;
...
}

然后我通过扩展将Spock用于我的IntegrationTests

@ContextConfiguration(classes = MyApplication, initializers = ConfigFileApplicationContextInitializer.class)
@WebAppConfiguration
@SpringBootTest
public class BaseSpecification extends Specification {

def setup() {
    RestAssured.port = serverPort;
}

@Value('${local.server.port}')
private int serverPort;
}

所有这一切都适用于Spring-Boot 1.3.5,但是现在我升级后在构建或运行测试时得到以下内容:

引起:org.springframework.beans.factory.UnsatisfiedDependencyException:创建名为'customUserDetailsService'的bean时出错:通过字段'passwordEncoder'表示的不满意的依赖关系;嵌套异常是org.springframework.beans.factory.BeanCurrentlyInCreationException:创建名为'passwordEncoder'的bean时出错:请求的bean当前正在创建:是否存在无法解析的循环引用? ...由以下原因引起:org.springframework.beans.factory.BeanCurrentlyInCreationException:创建名为'passwordEncoder'的bean时出错:请求的bean当前正在创建中:是否存在无法解析的循环引用?

UPDATE 根据Andy的评论,我移动了一些依赖关系,并认为我修复了它 .

  • 从WebSecurityConfig中删除了它并将它们放在MyApplicationConfiguration中:

@Autowired private CustomUserDetailsService customUserDetailsService;

@Autowired public void configureGlobal(AuthenticationManagerBuilder auth)抛出异常{auth.userDetailsService(customUserDetailsService).passwordEncoder(passwordEncoder());返回; }

@Bean public PasswordEncoder passwordEncoder(){// default strength = 10 return new BCryptPasswordEncoder(); }

虽然我没有任何构造函数注入,但似乎新的Spring Security以不同的方式执行它 . 我无法确认,但这不再是一个问题 .