Tomcat服务器自动加载监听器(监听器注入Spring Bean)

为避免前台显示权限菜单是每次都从数据库中读取,使用ServletContextListener在服务器启动和关闭时创建和关闭缓存。

在web.xml配置监听器:

<!-- 配置用于初始化数据的监听器,一定要配置在spring的ContextLoaderListener之后 -->
    <listener>
    <listener-class>com.itcast.oa.util.InitListener</listener-class>
    </listener>    
监听器类:
@Component
public class InitListener implements ServletContextListener{
    
    @Resource
    private PrivilegeService privilegeService;
    
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        List<Privilege> topPrivilegeList = privilegeService.findTopList();
        sce.getServletContext().setAttribute("topPrivilegeList", topPrivilegeList);
        System.out.println("=====已准备数据======");
    }

实际上,Tomcat不能检测到Spring容器,而是通过反射生成监听器实例,而将监听器类注入到Spring中,Spring容器里面也存在一个监听器实例,Tomcat自己创建的实例根本用不了Spring注入的内容,所以不能采用注入的方式。

下面是修改:

public class InitListener implements ServletContextListener{
    
    
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        
        //获取容器和相关的Service
        ApplicationContext ac = WebApplicationContextUtils.getWebApplicationContext(sce.getServletContext());
        PrivilegeService privilegeService = (PrivilegeService)ac.getBean("privilegeServiceImpl");
        List<Privilege> topPrivilegeList = privilegeService.findTopList();
        sce.getServletContext().setAttribute("topPrivilegeList", topPrivilegeList);
        System.out.println("=====已准备数据======");
    }




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值