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

本文介绍了一种在Spring容器启动时进行数据初始化的方法。通过实现InitializingBean接口并结合ServletContextAware接口,可以在容器启动时自动执行初始化逻辑,如查询数据库并将结果缓存到ServletContext中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

解决方案:给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>

转载于:https://www.cnblogs.com/zhengteng/p/5381910.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值