Open valeeraZ opened 4 years ago
最近在学习这个项目中的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
需要得到userDetailsServiceImpl
userDetailsServiceImpl
又需要使用userService
来调用它的find
方法但此时的
userService
还没有制造好……于是有了循环依赖异常org.springframework.beans.factory.UnsatisfiedDependencyException
-->UnsatisfiedDependencyException
--> ... -->beans.factory.BeanCurrentlyInCreationException
通过改写
loadUserByUsername
的方式,去除了UserDetailsServiceImpl
对UserService
的依赖,临时性地解决了这个异常。