Java 无法在logback appender中使用spring ApplicationContext

Java 无法在logback appender中使用spring ApplicationContext,java,spring,spring-boot,logback,Java,Spring,Spring Boot,Logback,技术: 弹簧靴 我编写了一个邮件附加器来重用spring管理的JavaMailSender public class ApplicationContextHolder implements ApplicationContextAware { public static ApplicationContext applicationContextHolder = null; @Override public void setApplicationContext(Applic

技术: 弹簧靴

我编写了一个邮件附加器来重用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为空。我调试
setApplicationContext
方法

我想类加载器可能不是同一个,但是
Thread.currentThread().contextClassLoader
具有相同的toString值。 有人知道为什么吗?如何在appender中获取applicationContext


在应用程序完全初始化之前,日志记录/附加程序开始工作。当appender代码尝试使用静态字段时,该字段可能仍然为空。您可以通过存储所有消息来解决这个问题,直到找到必要的bean,然后将它们发送出去。您的ApplicationContextHolder没有注释,因此Spring不会调用它。尝试将
@组件添加到class@StanislavL我在另一个配置类中声明了它。在第一个图像中,调用setAppilicationContext方法。在第二个图像中,您可以看到applicationContext在控制器类中是正常的。在第三个图像中,appender无法获取它。@zapl我在开始时没有使用它。我编写了一个测试控制器类,并在浏览器中访问了它。因此,我认为应用程序已完全初始化。此外,我重新启动了IDE,以防它出现问题。它没有任何帮助。