Cron4Jスケジューラを初期化して起動するために使用しているカスタムServletContextListenerがあります。
public class MainListener implements ServletContextListener {
@Value("${cron.pattern}")
private String dealHandlerPattern;
@Autowired
private DealMoqHandler dealMoqHandler;
}
示されているように、Listener 内のいくつかのオブジェクトを自動配線しており、Spring でリスナーのインスタンス化を管理したいと考えています。を介してプログラムによる web.xml 構成を使用していますWebApplicationInitializer
が、これまでのところ、リスナーは自動配線されていません (自動配線されていると思われるオブジェクトにアクセスしようとするたびに NullPointerExceptions が発生します)。
以下に示すように、ContextLoaderListener を追加した後、既に顧客リスナーを追加しようとしました。
public class CouponsWebAppInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext container) throws ServletException {
AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();
rootContext.register(SpringAppConfig.class);
// Manage the lifecycle of the root application context
container.addListener(new ContextLoaderListener(rootContext));
container.addListener(new MainListener()); //TODO Not working
}
これらの過去の質問Spring - Injecting a dependency into a ServletContextListenerとdependency inject servlet listenerを確認し、リスナーの contextInitialized メソッド内に次のコードを実装しようとしました。
WebApplicationContextUtils
.getRequiredWebApplicationContext(sce.getServletContext())
.getAutowireCapableBeanFactory()
.autowireBean(this);
ただし、次の例外が発生します。
Exception sending context initialized event to listener instance of class com.enovax.coupons.spring.CouponsMainListener: java.lang.IllegalStateException: No WebApplicationContext found: no ContextLoaderListener registered?
at org.springframework.web.context.support.WebApplicationContextUtils.getRequiredWebApplicationContext(WebApplicationContextUtils.java:90) [spring-web-3.1.1.RELEASE.jar:3.1.1.RELEASE]
リスナーを追加する前に、Spring がすでにインスタンス化を完了していることを確認するにはどうすればよいですか?