猿问

为什么passwordEncoder()作为@Bean?

如果直接作为函数调用,为什么passwordEncoder() 被定义为@Bean?这是我正在谈论的例子


@Bean

public PasswordEncoder passwordEncoder() {

    return new BCryptPasswordEncoder();

}


user.setPassword(passwordEncoder.encode(accountDto.getPassword()));

https://www.baeldung.com/spring-security-registration-password-encoding-bcrypt


或者我见过人们这样做 auth.userDetailsService(customUserDetailsService).passwordEncoder(passwordEncoder());


德玛西亚99
浏览 139回答 3
3回答

斯蒂芬大帝

@Bean注释可以出现在方法上,这是注册 bean 的一种可能性。这种方式BeanFactory知道这个 bean 并使用从方法名 ( "passwordEncoder") 派生的名称来限定它。另一种方法是明确命名它们: @Bean({"b1", "b2"}) // bean available as 'b1' and 'b2', but not 'myBean' public MyBean myBean() {     // instantiate and configure MyBean obj     return obj; }在示例中@Bean定义为将抽象绑定PasswordEncoder到实现BCryptPasswordEncoder。否则 spring 不会知道,如果扫描中有更多的类,那么具体的类是什么。

DIEA

您需要阅读有关依赖注入的更多信息,DI 是一种解决许多问题的模式,特别是与Program to Interface一起使用时,在这种情况下,如果您不编写它,它将强制它每次@Bean创建多个实例BCryptPasswordEncoder调用该方法。而如果你编写@Beanbean 生命周期的实例化和管理,则由 管理Spring Container,这再次确保仅创建单个实例,因为Singleton作用域是 spring 中的默认实例。

阿晨1998

@Bean注解用于将任何对象/方法注册到Spring容器作为Bean。在您使用passwordEncoder()方法作为bean的问题中,它使用@Bean注释进行标记,以便可以轻松地将其注入到其他对象并使用。
随时随地看视频慕课网APP

相关分类

Java
我要回答