• springmvc在启动工程的时候就访问数据库,加载一些共同的数据


    在网上找到一个类似的问题,稍做修改

    解决方案:给web容器添加一个Listener类,在容器启动的时候执行Listener的“初始化”方法,在这个初始化方法中执行查询数据库的所有操作,然后将数据库中的信息缓存起来

    问题:上面的方法很好,但问题是如何去查询数据库,由于使用了spring的IOC特性,查询数据库的service控制dao层,dao层访问数据库,而Listener类只是在系统启动的时候会执行初始化方法,但是“service”对象没有被spring管理,也就是说没有service对象访问数据库,只能使用jdbc的方式连接,这个很显然不符合MVC开发的特性。那么如何才能在启动web容器的时候利用spring的IOC特性呢?

    解决方法:spring给出的解决方案——写一个类,实现InitializingBean接口,然后交由spring容器管理

    public class InitDataListener implements InitializingBean, ServletContextAware {

    @Resource
    private AttriService attriService;

    @Override
    public void setServletContext(ServletContext arg0) {
    List<Attri> attriLst = attriService.getAttriLst();
    arg0.setAttribute("attriLst",

    attriLst);

          ServletContext也是和session一样像一张表,分为属性、值

          添加属性:setAttribute(String name,Object obj);

          得到值:getAttribute(String name);

          删除属性:removeAttribute(String name); 

          生命周期

          ServletContext中的属性的生命周期从创建开始,到服务器关闭而结束

    }

    @Override
    public void afterPropertiesSet() throws Exception {
    // 在这个方法里面写 初始化的数据也可以。
    }
    }

    配置文件里写上这个

    <!-- spring系统启动以后,会先加载该类 -->
    <bean class="你的包路径.InitDataListener">
    </bean>

  • 相关阅读:
    树莓派frp添加为服务管理
    liunx开源打印驱动foo2zjs编译小坑
    树莓派中实现ll命令
    Windows中使用QEMU创建树莓派虚拟机
    C#打印条码BarTender SDK打印之路和离开之路(web平凡之路)(转)
    数据库连接池问题 Max Pool Size
    C#时间
    XAF 如何从Excel复制多个单元格内容到GridView(收藏)
    C#日期处理(转) 太忘记了,备忘
    C#、devExpress 的 给bandedGrid加菜单功能 :复制、粘贴的例子(转)
  • 原文地址:https://www.cnblogs.com/zhengteng/p/5381910.html
Copyright © 2020-2023  润新知