- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我相信这应该很简单,但我想不通。
我有一个这样的配置类:
@Configuration
@AutoConfigureAfter(MailSenderAutoConfiguration.class)
public class MyMailConfiguration {
@Bean
@ConditionalOnBean(JavaMailSender.class)
public MyMailer myMailer(JavaMailSender javaMailSender) {
return new MyMailer(javaMailSender);
}
}
但是 MyMailer 没有被创建。如果我删除 ConditionalOnBean,JavaMailSender 将被注入(inject)并创建 MyMailer,但我想要那里的条件,所以当我没有配置邮件时,它不会崩溃。
剩下的唯一选择是使用 ConditionalOnProperty 并观察与 MailSenderAutoConfiguration 相同的属性,但这很糟糕。
最佳答案
问题是@AutoConfigureAfter 没有按预期工作。看 @AutoConfigureAfter not working as desired
处理 MyMailConfiguration 时,无法保证 MailSenderAutoConfiguration 中的所有 bean 都已创建。所以 ConditionalOnBean 不工作(bean 尚不存在)。当没有 ConditionalOnBean anno 时,Spring 会正确理解 bean 创建顺序图。
我已经为您的问题写了一个示例:
@Configuration
public class RootConfig {
@PostConstruct
public void post(){
System.out.println("RootConfig processed");
}
@Bean
public RootMailer rootMailer(){
System.out.println("Root bean created");
return new RootMailer();
}
}
@Configuration
@AutoConfigureAfter(RootConfig.class)
public class MyConfig {
@PostConstruct
public void post(){
System.out.println("MyConfig processed");
}
@Bean
// @ConditionalOnBean(RootMailer.class)
public MyMailer myMailer(RootMailer javaMailSender) {
System.out.println("MyMail bean created");
return new MyMailer(javaMailSender);
}
}
在哪里RootConfig == MailSenderAutoConfiguration, RootMailer == JavaMailSender
生成输出:
MyConfig processed
RootConfig processed
Root bean created
MyMail bean created
如果您取消对@ConditionalOnBean 的注释,顺序将保持不变,但该 bean 在处理时刻将不存在。
关于spring-boot - Spring boot - 仅当 bean JavaMailSender 存在时才自动配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57501215/
我有 json 数据: { "products": [ { "productId" : 0, "productImg" : "../img/product-ph
我是一名优秀的程序员,十分优秀!