gpt4 book ai didi

java - 为什么不需要通过配置公开 JavaMailSender 即可 Autowiring ,Spring Boot 1.5.8

转载 作者:行者123 更新时间:2023-12-02 02:11:35 31 4
gpt4 key购买 nike

这实际上是我问的问题的一部分here ,该问题没有得到答复,最终被标记为重复。

问题:我只需使用 @Autowired 注释即可使用 JavaMailSender。我没有通过任何配置类公开它。

@Component
public class EmailUtil {

@Autowired
private JavaMailSender javaMailSender;

}

但是,除非通过配置类公开 BCryptPasswordEncoder bean,否则以下内容不起作用。

@Controller
public class UserController {

@Autowired
private BCryptPasswordEncoder encoder;

}

我使用的是 Spring Boot 1.5.8

我的疑问是:

  • 为什么JavaMailSender”已成功注入(inject),而BCryptPasswordEncoder/PasswordEncoder Autowiring 仅在通过配置类公开后才成功。

    <
  • 我如何确定何时通过配置类显式公开 Bean,何时不公开?我如何知道哪些 Bean 需要暴露?

非常感谢任何形式的帮助/指导。

最佳答案

基本上,是 JavaMailSender 的实现作为 Spring Boot 自动配置的一部分公开。文档 here 中对此进行了说明:

The Spring Framework provides an easy abstraction for sending email by using the JavaMailSender interface, and Spring Boot provides auto-configuration for it as well as a starter module.

BCryptPasswordEncoder 的情况并非如此。 .

如果我必须猜测,我认为选择这种方法是因为:

  • 很少有开发人员需要重新实现 JavaMailSender发送电子邮件的功能
  • 许多开发人员根据速度和安全需求选择不同的哈希算法,尽管BCryptPasswordEncoder推荐。
  • 由于不同的开发人员可能会选择替代方案 PasswordEncoder ,有 BCryptPasswordEncoder已经配置的需要使用@Primary位于您实际想要使用的位置(在编写类似 @Autowired PasswordEncoder encoder 的情况下),这可能会导致困惑。

How do I know for sure when to expose beans explicitly via a configuration class and when not to ? How do I know which beans need to be exposed ?

阅读特定 bean 的引用文档 - 它应该说明它是否是预先配置的(以及在什么条件下,即存在某些启动程序包)。除此之外,您可以检查实现以查看是否有任何组件实现了您希望注入(inject)的 bean 的接口(interface)。

更新:我实际上浏览了一些来源,并注意到 BCryptPasswordEncoder 实现的接口(interface)一方面,并​​且 Md5PasswordEncoder/ShaPasswordEncoder另一方面,它们位于不同的包中,后者已被弃用。在这种情况下,可以安全地假设 BCryptPasswordEncoder 没有进行自动配置。自从:

  1. 当引用不同包中完全不同的接口(interface)(即实现不同的方法)时,看到实现一个接口(interface)可能会导致很大的困惑
  2. 对密码进行哈希处理时应使用的“默认值”可能因开发者而异,因此无论如何都需要手动配置。

关于java - 为什么不需要通过配置公开 JavaMailSender 即可 Autowiring ,Spring Boot 1.5.8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49929312/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com