zoukankan      html  css  js  c++  java
  • 配置监听器 服务器启动时 检索常用数据 保存在application中 减少数据的查询操作(OA项目)

    模型

    大致介绍一下:左侧菜单是用户登录成功之后显示的页面  这些数据就是通过查询数据库 然后在页面中把查到的数据  循环遍历出来   构成了操作菜单

    第一个解决的问题:常用数据  在服务器启动的时候  查询一次  保存在application作用域中  所有用户共享   减少查询次数

    所以配置监听器:

    服务器启动的时候 需要加载这个类 调用初始化方法  所以web.xml中配置监听代码     在监听器也是有执行顺序的  配置在前面的先执行  因为在初始化代码中需要调用spring容器中

    创建的PrivilegeService对象  所以监听代码需要放在spring监听代码之后

    第二个问题: 初始化方法中能够实现serivce的注入吗

    这里配置了好监听器之后  服务器启动的时候 就是通过提供的包.类名称  以反射的方式 创建监听的类的实例(通过反射new出来的对象)  并且执行初始化方法(因为配置的这个监听器就是监听application的创建)  这是正确的

    但是执行初始化方法 使用的是通过反射new出来的对象  不是容器生成出的对象  当然也不存在于进容器中  那么怎么可以注入容器中的其他对象呢(service)

     如果这样 使用注解  让容器创建该类对象  那么的确可以创建成功  并且注入容器中的其他对象   

    但是这个对象tomcat在启动的时候  会使用吗  会执行初始化操作吗  首先这里应该明白  此时服务器启动的时候  已经创建了2个监听类对象  一个是通过反射方式  一个是通过spring容器生成  但是执行初始化操作的时候 

    使用的是web.xml中配置之后 通过 反射创建的实例  所以这个对象类中 不能以注入的方式得到service对象 并且使用它

    解决办法,得到容器对象  以getBean的方式得到需要使用的service对象

    启动服务器 可以看到查询数据的信息  说明我们需要的数据现在已经保存进了application中

    然后  我们登录  看看是否可以成功看到我们需要的数据

     

    出现nosession异常  这个异常已经非常常见了  懒加载异常  但是疑问的是 我们已经在web.xml中已经配置了延迟关闭session的过滤器

    这就是第三个需要说明的问题:

    首先 第一点:服务器启动的时候(不是请求的过程中  不会经过过滤器) 把数据检索了出来  因为懒加载机制  所以此时懒加载属性 没有加载 (关联属性没有加载)

    第二点:即使经过了过滤器  也不能解决懒加载异常  因为该异常的解决前提是  必须是同一次请求(用户访问->----页面显示数据 session关闭)     在同一次请求之内的懒加载异常 用延迟过滤器解决

    所以这里就需要在配置文件中把lazy的属性设置为false

    刷新

  • 相关阅读:
    勾股定理
    委托应用-表单的创建和编辑
    学生成绩表(输入成绩后自动算出最高、最低、平均分)
    完美拖拽(点击回放运动轨迹)
    实心图案
    微博发布
    批量删除
    数组去重的方法
    模拟垂直滚动条
    点不到的NO
  • 原文地址:https://www.cnblogs.com/Joke-Jay/p/7384734.html
Copyright © 2011-2022 走看看