为了账号安全,请及时绑定邮箱和手机立即绑定

为什么passwordEncoder()作为@Bean?

为什么passwordEncoder()作为@Bean?

德玛西亚99 2023-06-28 15:45:00
如果直接作为函数调用,为什么passwordEncoder() 被定义为@Bean?这是我正在谈论的例子@Beanpublic 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());
查看完整描述

3 回答

?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

@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 不会知道,如果扫描中有更多的类,那么具体的类是什么。


查看完整回答
反对 回复 2023-06-28
?
DIEA

TA贡献1820条经验 获得超2个赞

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


查看完整回答
反对 回复 2023-06-28
?
阿晨1998

TA贡献2037条经验 获得超6个赞

@Bean注解用于将任何对象/方法注册到Spring容器作为Bean。

在您使用passwordEncoder()方法作为bean的问题中,它使用@Bean注释进行标记,以便可以轻松地将其注入到其他对象并使用。


查看完整回答
反对 回复 2023-06-28
  • 3 回答
  • 0 关注
  • 143 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信