最近在学习这个项目中的Spring Security,用其中的代码做了一个自己的项目,在线下用mvn package和java -jar都运行正常,使用DevOps部署到线上出现了循环依赖的异常。(为了使idea生成下面的图,加了几处@Autowired注解)
-
要生成userController,就需要通过自动装配方式使用userService
public class UserController {
private final UserService userService;
-
其中userService需要bCryptPasswordEncoder,也是通过@Autowired方式装配
public class UserService {
@Autowired
private final BCryptPasswordEncoder bCryptPasswordEncoder;
-
bCryptPasswordEncoder从securityConfig中由注解@Bean制造出
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Bean
public BCryptPasswordEncoder bCryptPasswordEncoder() {
return new BCryptPasswordEncoder();
}

-
在此之前,securityConfig需要得到userDetailsServiceImpl
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
UserDetailsServiceImpl userDetailsServiceImpl;
-
userDetailsServiceImpl又需要使用userService来调用它的find方法
@Service
public class UserDetailsServiceImpl implements UserDetailsService {
private final UserService userService;
@Autowired
public UserDetailsServiceImpl(UserService userService) {
this.userService = userService;
}
@Override
public UserDetails loadUserByUsername(String name) {
User user = userService.find(name);
return new JwtUser(user);
}
}

-
但此时的userService还没有制造好……于是有了循环依赖异常org.springframework.beans.factory.UnsatisfiedDependencyException --> UnsatisfiedDependencyException --> ... --> beans.factory.BeanCurrentlyInCreationException


通过改写loadUserByUsername的方式,去除了UserDetailsServiceImpl对UserService的依赖,临时性地解决了这个异常。
最近在学习这个项目中的Spring Security,用其中的代码做了一个自己的项目,在线下用
mvn package和java -jar都运行正常,使用DevOps部署到线上出现了循环依赖的异常。(为了使idea生成下面的图,加了几处@Autowired注解)要生成
userController,就需要通过自动装配方式使用userService其中
userService需要bCryptPasswordEncoder,也是通过@Autowired方式装配bCryptPasswordEncoder从securityConfig中由注解@Bean制造出在此之前,
securityConfig需要得到userDetailsServiceImpluserDetailsServiceImpl又需要使用userService来调用它的find方法但此时的
userService还没有制造好……于是有了循环依赖异常org.springframework.beans.factory.UnsatisfiedDependencyException-->UnsatisfiedDependencyException--> ... -->beans.factory.BeanCurrentlyInCreationException通过改写
loadUserByUsername的方式,去除了UserDetailsServiceImpl对UserService的依赖,临时性地解决了这个异常。