u014459038 2015-10-10 01:24 采纳率: 33.3%
浏览 2038
已采纳

看异常,用配置没问题。但是注解会报错,求解答!!!

 严重: Error configuring application listener of class ibatis.apache.org.util.ApplicationListener
javax.naming.NamingException: Cannot create resource instance
    at org.apache.naming.factory.ResourceEnvFactory.getObjectInstance(ResourceEnvFactory.java:115)
    at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:304)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:842)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:153)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:830)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:167)
    at org.apache.catalina.core.DefaultInstanceManager.lookupFieldResource(DefaultInstanceManager.java:559)
    at org.apache.catalina.core.DefaultInstanceManager.processAnnotations(DefaultInstanceManager.java:449)
    at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:135)
    at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:116)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4919)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5517)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:652)
    at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1263)
    at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1948)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
    at java.lang.Thread.run(Thread.java:662)


public class ApplicationListener implements ServletContextListener {
    @Resource
    private NoteTableDAO noteTableDAO;
    @Resource
    private NoteOperDAO noteOperDAO;

    @Override
    public void contextDestroyed(ServletContextEvent arg0) {
        // TODO Auto-generated method stub
        this.noteTableDAO = null;
        this.noteOperDAO = null;
    }

    @Override
    public void contextInitialized(ServletContextEvent servletcontextevent) {
        // TODO Auto-generated method stub
        //获取ServletContext对象
        ServletContext servletContext = servletcontextevent.getServletContext();
        //服务器启动的时候加载日志需要的信息
        noteMap(servletContext);
    }

    private void noteMap(ServletContext servletContext) {
        // TODO Auto-generated method stub
        //获取日志表的对应数据
        Map<String, String> noteTableMap = noteTableDAO.queryAllForMap();
        //获取日志操作的对应数据
        Map<String, String> noteOperMap = noteOperDAO.queryAllForMap();
        //将查询到的结果存放至作用域
        servletContext.setAttribute("noteTableMap", noteTableMap);
        servletContext.setAttribute("noteOperMap", noteOperMap);
    }
}

  • 写回答

4条回答 默认 最新

  • u014459038 2015-10-10 06:34
    关注

    自己解决的:理由是,filter listener servlet 无法由spring 管理,因此用注解获取不到相应对象,必须通过getBean 的方式来获取。
    值得一提的是,通过注解过的类也可以通过getBean("")方式获取到,而不必再进行相关配置。
    解决方案:

     public class ApplicationListener implements ServletContextListener {
        //获取spring注入的bean对象
        private WebApplicationContext springContext;
        private NoteTableDAO noteTableDAO;
        private NoteOperDAO noteOperDAO;
    
        @Override
        public void contextDestroyed(ServletContextEvent arg0) {
            // TODO Auto-generated method stub
            this.springContext = null;
            this.noteTableDAO = null;
            this.noteOperDAO = null;
        }
    
        @Override
        public void contextInitialized(ServletContextEvent servletcontextevent) {
            // TODO Auto-generated method stub
            //获取ServletContext对象
            ServletContext servletContext = servletcontextevent.getServletContext();
            //服务器启动的时候加载日志需要的信息
            noteMap(servletContext);
        }
    
        private void noteMap(ServletContext servletContext) {
            // TODO Auto-generated method stub
            springContext = WebApplicationContextUtils.getWebApplicationContext(servletContext);
            if (springContext != null) {
                noteOperDAO = (NoteOperDAO) springContext.getBean("noteOperDAO");
                noteTableDAO = (NoteTableDAO) springContext.getBean("noteTableDAO");
                //获取日志表的对应数据
                Map<String, String> noteTableMap = noteTableDAO.queryAllForMap();
                //获取日志操作的对应数据
                Map<String, String> noteOperMap = noteOperDAO.queryAllForMap();
                //将查询到的结果存放至作用域
                servletContext.setAttribute("noteTableMap", noteTableMap);
                servletContext.setAttribute("noteOperMap", noteOperMap);
            }
        }
    
        public NoteTableDAO getNoteTableDAO() {
            return noteTableDAO;
        }
    
        public void setNoteTableDAO(NoteTableDAO noteTableDAO) {
            this.noteTableDAO = noteTableDAO;
        }
    
        public NoteOperDAO getNoteOperDAO() {
            return noteOperDAO;
        }
    
        public void setNoteOperDAO(NoteOperDAO noteOperDAO) {
            this.noteOperDAO = noteOperDAO;
        }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)