不能使用创建的bean

时间:2018-01-09 21:59:25

标签: java spring dependency-injection autowired bcrypt

我有一个课程,我在其中创建一个from scipy import optimize

@Bean

然后在其他课程中我想使用它,但我不能说它@Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } 尚未初始化。

类:

Bean

在这里我想用它:

@Configuration
@ComponentScan(basePackages = "com.inventory")
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Autowired
    @Qualifier("databaseUsersDetailsService")
    private UserDetailsService userDetailsService;

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder());
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }

}

在构造函数中,由于@Service public class SessionService { private final UserDetailsService userDetailsService; private final BCryptPasswordEncoder encoder; private final AuthenticationManager authenticationManager; @Autowired public SessionService(UserDetailsService userDetailsService, BCryptPasswordEncoder encoder, AuthenticationManager authenticationManager) { this.userDetailsService = userDetailsService; this.encoder = encoder; this.authenticationManager = authenticationManager; } ,我无法使用它。

有谁知道这里有什么问题?我正在使用no beans BCryptPasswordEncoder was found

2 个答案:

答案 0 :(得分:1)

Spring上下文中没有read.csv.sql("1987.csv", "select * from file limit 3", eol = "\n", filter = "bzip2 -cd 1987.csv.bz2") 个实例。实际上,你已经注册了一个BCryptPasswordEncoder类型的bean,你应该注入一个这种类型的对象。

选择PasswordEncoder 的实现并不重要,在bean注册过程中你声明的类型确实很重要。

答案 1 :(得分:1)

如果没有提供此类型,则需要注入BCryptPasswordEncoder。你有2个选择

因为您需要一个

而更改为完全实现
@Bean
public BCryptPasswordEncoder passwordEncoder() {
    return new BCryptPasswordEncoder();
}

或者将您的注射要求转换为更一般的类型

@Autowired
public SessionService(UserDetailsService userDetailsService, PasswordEncoder encoder, AuthenticationManager authenticationManager) {
}

两种解决方案都有效。