Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

循环依赖 #22

Open
valeeraZ opened this issue Sep 18, 2020 · 1 comment
Open

循环依赖 #22

valeeraZ opened this issue Sep 18, 2020 · 1 comment
Labels
bug Something isn't working

Comments

@valeeraZ
Copy link

最近在学习这个项目中的Spring Security,用其中的代码做了一个自己的项目,在线下用mvn packagejava -jar都运行正常,使用DevOps部署到线上出现了循环依赖的异常。(为了使idea生成下面的图,加了几处@Autowired注解)

  1. 要生成userController,就需要通过自动装配方式使用userService

    public class UserController {
     private final UserService userService;
  2. 其中userService需要bCryptPasswordEncoder,也是通过@Autowired方式装配

    public class UserService {
     @Autowired
     private final BCryptPasswordEncoder bCryptPasswordEncoder;
  3. bCryptPasswordEncodersecurityConfig中由注解@Bean制造出

    public class SecurityConfig extends WebSecurityConfigurerAdapter {
       @Bean
       public BCryptPasswordEncoder bCryptPasswordEncoder() {
           return new BCryptPasswordEncoder();
       }

    bCrypt

  4. 在此之前,securityConfig需要得到userDetailsServiceImpl

    public class SecurityConfig extends WebSecurityConfigurerAdapter {
     @Autowired
     UserDetailsServiceImpl userDetailsServiceImpl;
  5. 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);
        }
    
      }

    UserDetailsServiceImpl

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

image
IMG_1515

通过改写loadUserByUsername的方式,去除了UserDetailsServiceImplUserService的依赖,临时性地解决了这个异常。

@Snailclimb
Copy link
Owner

最近在学习这个项目中的Spring Security,用其中的代码做了一个自己的项目,在线下用mvn packagejava -jar都运行正常,使用DevOps部署到线上出现了循环依赖的异常。(为了使idea生成下面的图,加了几处@Autowired注解)

  1. 要生成userController,就需要通过自动装配方式使用userService

    public class UserController {
     private final UserService userService;
  2. 其中userService需要bCryptPasswordEncoder,也是通过@Autowired方式装配

    public class UserService {
     @Autowired
     private final BCryptPasswordEncoder bCryptPasswordEncoder;
  3. bCryptPasswordEncodersecurityConfig中由注解@Bean制造出

    public class SecurityConfig extends WebSecurityConfigurerAdapter {
       @Bean
       public BCryptPasswordEncoder bCryptPasswordEncoder() {
           return new BCryptPasswordEncoder();
       }

    bCrypt

  4. 在此之前,securityConfig需要得到userDetailsServiceImpl

    public class SecurityConfig extends WebSecurityConfigurerAdapter {
     @Autowired
     UserDetailsServiceImpl userDetailsServiceImpl;
  5. 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);
        }
    
      }

    UserDetailsServiceImpl

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

image
IMG_1515

通过改写loadUserByUsername的方式,去除了UserDetailsServiceImplUserService的依赖,临时性地解决了这个异常。

不好意思 ,刚看到。我目前把登录接口暴露出去,这个问题也没有了。

@Snailclimb Snailclimb added the bug Something isn't working label Nov 16, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants