Spring boot Spring引导升级导致无法解决的循环引用
我将我的SpringBoot 1.3.5升级到1.5.2版本,当我的bean被连接时,突然出现了一个错误。我没有在任何地方进行构造函数注入,因此循环引用毫无意义 这是我的主要课程:Spring boot Spring引导升级导致无法解决的循环引用,spring-boot,Spring Boot,我将我的SpringBoot 1.3.5升级到1.5.2版本,当我的bean被连接时,突然出现了一个错误。我没有在任何地方进行构造函数注入,因此循环引用毫无意义 这是我的主要课程: @EnableGlobalMethodSecurity(securedEnabled = true) @SpringBootApplication public class MyApplication extends WebMvcConfigurerAdapter { ... } 我在/src/java/./
@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();
}
...
}
及
我还有一个CustomUserDetails服务,它确实使用passwordEncoder,但在此之前从未出现过问题:
@Component
public class CustomUserDetailsService implements UserDetailsService {
@Autowired
private UserService userService;
@Autowired
private UserRepository userRepository;
@Autowired
private PasswordEncoder passwordEncoder;
@Autowired
private PasswordResetTokenRepository passwordTokenRepository;
...
}
然后我使用Spock通过扩展
@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.unsatifiedDependencyException:
创建名为“customUserDetailsService”的bean时出错:不满意
通过字段“passwordEncoder”表示的依赖关系;嵌套异常
是org.springframework.beans.factory.beancurrentlyIncrementationException:
创建名为“passwordEncoder”的bean时出错:请求的bean为
当前正在创建:是否存在无法解析的循环引用?
... 原因:
org.springframework.beans.factory.beancurrentlyIncrementationException:
创建名为“passwordEncoder”的bean时出错:请求的bean为
当前正在创建:是否存在无法解析的循环引用
更新
根据安迪的评论,我移动了一些依赖项,并认为我已经修复了它
虽然我没有任何构造函数注入,但新的Spring安全性似乎做得不同。我无法确认,但这不再是一个问题。您的
WebSecurityConfig
似乎创建了一个循环。你能分享你的customuserdetails服务吗?它似乎依赖于由WebSecurityConfig
创建的PasswordEncoder
bean,同时也是WebSecurityConfig
的一个依赖项。Andy,正如你提到的,我确实有一个依赖项。然而,这在两年内从未引起过问题,那么为什么升级会影响到这一点呢?像这样的周期通常靠运气而不是设计。它是SpringBoot1.3和1.5中SpringSecurity的一个不同版本,这可能会导致您的运气不好。因此,如果我不使用构造函数注入,我如何避免依赖性问题?我将我的spring security升级到了4.2.3.BUILD-SNAPSHOT,但我认为这并不能解决这个问题。我认为,多亏了您的初步评论,我发现了这个问题。我用我的工作更新了原来的帖子,如果你能回答我的评论,我接受。
@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;
}