技术: spring boot,logback
我编写了一个邮件appender来重用spring托管的JavaMailSender。为了在spring中获取JavaMailSender实例,我在类中有了这个全局静态字段
public class ApplicationContextHolder implements ApplicationContextAware {
public static ApplicationContext applicationContextHolder = null;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
applicationContextHolder = applicationContext;
}
}
在appender中,我直接使用静态字段
if (javaMailSender == null) {
javaMailSender = ApplicationContextHolder.applicationContextHolder.getBean(JavaMailSender.class);
}
问题是字段applicationContextHolder为null。我调试setApplicationContext
方法
并且发现applicationContext被注入。我认为类加载器可能不是同一个,但Thread.currentThread().contextClassLoader
具有相同的toString值。
任何人都知道为什么?如何在appender中获取applicationContext?