java web 服务启动初始化类_spring 在web容器启动时执行初始化方法

开发框架:spingMVC+myBatis

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

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

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

Java代码  6f238f19789eb28a6ecd76327ef8a363.png

public class InitDataListener implements InitializingBean, ServletContextAware{

private UserService userService;//属性。和配置文件对应property name对应

private Logger log = Logger.getLogger(InitDataListener.class);

public UserService getUserService() {

return userService;

}

public void setUserService(UserService userService) {

this.userService = userService;

}

@Override

public void afterPropertiesSet() throws Exception {

//在这个方法里面写 初始化的数据也可以。

}

@Override

public void setServletContext(ServletContext arg0) {

//userMap容器存放 userList(用户数据)

List userList = new ArrayList();

try {

userList = userService.queryAllUser();

Map userMap = CachFactory.getInstance().createCach("userMap");

//一个工厂模式和单例模式的使用。文档最后有代码

for(User user:userList){

userMap.put(user.getUserid(), user);

}

} catch (Exception e) {

log.error("queryAllUser error系统初始化查询所有用户出错");

}

System.out.println(userList.size());

}

Java代码  6f238f19789eb28a6ecd76327ef8a363.png

备注:userService这个类实际上也是被spring管理了的,他管理的dao层是操作数据库的,这里我就不贴上代码了,只是说明一下这种解决方案和思想。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值