起初的配置
希望通过@Autowired注解的方式 注入对象,结果发生错误
@WebListener
@Component
public class ProductTypeListener implements ServletContextListener {
@Autowired
private Product_TypeService productTypeService;
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
System.out.println("ProductTypeListener on!!!");
List<Product_Type> productTypes = productTypeService.TypeList();
//添加数据
servletContextEvent.getServletContext().setAttribute("ptList",productTypes);
}
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
}
}
发生错误
[2023-09-15 03:25:11,037] 工件 ssm:war exploded: 部署工件时出错。请参阅服务器日志了解详细信息。
但是我们可以发现,其实这个监听器已经启用了
从tomcat的日志中可以发现 ,是找不到productTypeService这个bean
最终配置
@WebListener
public class ProductTypeListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
System.out.println("ProductTypeListener on!!!");
// 基于注解的方式 获取到SpringConfig这个配置类
ApplicationContext context =new AnnotationConfigApplicationContext(SpringConfig.class);
Product_TypeService productTypeService = (Product_TypeService) context.getBean("productTypeService");
List<Product_Type> productTypes = productTypeService.TypeList();
servletContextEvent.getServletContext().setAttribute("ptList",productTypes);
}
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
}
}
如果使用的是xml的方式就使用 这个方法
ApplicationContext context =new ClassPathXmlApplicationContext("**.xml");
运行成功