我是 spring 和 spring mvc 新手
我正在学习一门类(class),他们介绍了以下 @Configuration 类:
@Configuration
public class MailConfig {
@Bean
@ConditionalOnProperty(name="spring.mail.host",
havingValue="foo",
matchIfMissing=true)
public MailSender mockMailSender() {
return new MockMailSender();
}
@Bean
@ConditionalOnProperty(name="spring.mail.host")
public MailSender smtpMailSender(**JavaMailSender javaMailSender**) {
SmtpMailSender mailSender = new SmtpMailSender();
mailSender.setJavaMailSender(javaMailSender);
return mailSender;
}
}
在第二个 bean (smtpMailSender) 中 - 有一个参数: JavaMailSender javaMailSender
但参数不是调用者传递的。
讲师说:“在 bean 方法内部,如果我们传递像这样的参数,参数将由 spring 注入(inject)”
我的问题是 - 我怎么知道这是 Spring 的预期行为?老师这样做的依据是什么? JavaMailSender 是否有一个特定的特征,它是 spring 的一部分,因此被视为一个组件,或者这里有其他东西在起作用?
最佳答案
简单地说,这就是 Spring 在使用基于 Java 的配置时的工作方式。
当检测到用@Bean
注释的方法并且它有参数时,Spring会默认自动连接它们。它按类型执行此操作。
@Bean
@ConditionalOnProperty(name="spring.mail.host")
public MailSender smtpMailSender(JavaMailSender javaMailSender) {
SmtpMailSender mailSender = new SmtpMailSender();
mailSender.setJavaMailSender(javaMailSender);
return mailSender;
}
在这种情况下,它将向此方法注入(inject)一个 JavaMailSender
类型的 bean。当您使用 Spring Boot 时,它是默认配置的并将被注入(inject)。有关更多信息,请参阅 the reference guide .
关于java - 自动实例化的bean参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41870881/