【发布时间】:2021-12-16 05:37:45
【问题描述】:
我在实现 ServletContextListener 的 TestAppListener 类中尝试了基于构造函数的依赖注入。 我收到了这个错误 向类 [com.example.listener.TestAppListener] 的侦听器实例发送上下文初始化事件的异常。
我搜索了堆栈溢出,但找不到针对这种情况的任何解决方案。请任何人帮我解决这个问题。我也将实现类放在 META-INF.services 文件夹中。我的理解是构造函数依赖注入存在一些问题,但我的情况需要这种 DI 方式,因为我想实时在启动方法中创建数据源连接。
找到我正在使用的所有课程,
@WebListener
public class TestAppListener implements ServletContextListener {
private static TestDao dao;
public TestAppListener(TestDao dao){
this.dao = dao;
}
public TestAppListener(){}
@Override
public void contextInitialized(ServletContextEvent sce) {
dao = ServiceLoader.load(TestDao.class).iterator().next();
dao.startUp();
System.out.println("Context initialized method called");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("Context destroyed method called");
dao.shutDown();
}
}
public interface TestDao {
void startUp();
void shutDown();
}
public class TestDaoImpl implements TestDao {
@Override
public void startUp() {
System.out.println("Database is initialized");
}
@Override
public void shutDown() {
System.out.println("Database is initialized");
}
}
@Configuration
public class SpringConfig {
public SpringConfig() {
}
@Bean
public ServletListenerRegistrationBean<ServletContextListener> listenerRegistrationBean() {
ServletListenerRegistrationBean<ServletContextListener> bean = new ServletListenerRegistrationBean<>();
bean.setListener(new TestAppListener());
return bean;
}
}
【问题讨论】:
标签: java spring spring-boot dependency-injection servlet-listeners