java initial_springmvc initial初始化

项目需求是在启动服务时,将某些内容放入到共同里面,例如数据字典表内容。

但数据字典表内容存在于数据库中,使用传统的listener在加载时,无法获取service实例,打开事务控制。

springmvc提供了几个接口,可以在启动时执行。

InitializingBean和ServletContextAware都可以添加。

因加载的内容大多都是全局共用,因此可用servletContext来存储,在使用的地方获取即可。

如果使用单例模式存储对象,可使用InitializingBean,将数据放入到单例对象中。

/*** 系统初始化完毕后则会执行此方法

* @Description:

*@authorDennyZhao

* @date 2018年3月6日

*@version1.0*/

public class InitDataListener implementsInitializingBean,ServletContextAware {/*** 单位名称服务类*/@InjectprivateUnitService unitService;/*** 列表服务类*/@InjectprivateItemsService itemsService;/*** 根据单位服务类获取单位名称*/@Overridepublic void afterPropertiesSet() throwsException {

SingleItems singleItem=SingleItems.getInstance();//获取所有的单位名称

List unitAllList =unitService.getUnitAllList();

List unitNameList = new ArrayList();

unitAllList.forEach(unitDO->{

unitNameList.add(unitDO.getUnitName());

});

singleItem.setUnitNameList(unitNameList);//获取所有的列表

Map> allItemsMap =itemsService.getAllItemsMap();

singleItem.setItemMap(allItemsMap);

}

@Overridepublic voidsetServletContext(ServletContext servletContext) {

}

}

单例对象见Java下的单例模式:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.pccw.solutions.retire.common.model;importjava.io.Serializable;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importjavax.inject.Singleton;importorg.apache.commons.collections.MapUtils;/*** 创建单例模式对象,全局共用一个对象,将所有的查询Item结果放入到此对象中

* @Description:

*@authorDennyZhao

* @date 2018年3月6日

*@version1.0*/@Singletonpublic class SingleItems implementsSerializable{/*** 自动生成序列号*/

private static final long serialVersionUID = -3893810440799071288L;/*** 实例对象*/

private static final SingleItems SINGLE_ITEMS = newSingleItems();/*** 单位名称列表*/

private List unitNameList = new ArrayList();/*** Item全局对象*/

private Map> itemMap = new HashMap>();privateSingleItems() {

}/*** set ItemMap

*@paramitemMap*/

public void setItemMap(Map>itemMap) {synchronized (this.itemMap){if(this.itemMap != null && !MapUtils.isEmpty(this.itemMap)) {return;

}this.itemMap =itemMap;

}

}/*** 获取单例对象

*@return

*/

public staticSingleItems getInstance() {returnSINGLE_ITEMS;

}/*** 单位名称检查

*@paramunitName

*@return

*/

public booleancheckUnitName(String unitName) {returnunitNameList.contains(unitName);

}/*** 添加内容

*@paramitemType

*@paramitemList*/

public void addItem(String itemType, ListitemList) {synchronized(itemMap){//判断是否已经存在

if(itemMap.containsKey(itemType)) {return;

}//添加

itemMap.put(itemType, itemList);

}

}/*** 根据项类型,和项名称判断是否存在此名称

*@paramitemType

*@paramitemName

*@return

*/

public booleancheckItem(String itemType, String itemName) {

List itemList =itemMap.get(itemType);if(itemList == null || itemList.size() == 0) {return false;

}returnitemList.contains(itemName);

}/*** 获取Item列表*/

public ListgetItem(String itemType){

List itemList =itemMap.get(itemType);returnitemList;

}/*** 移除内容*/

public voidremoveItem(String itemType) {synchronized (this.itemMap){//判断是否已经存在

if(!itemMap.containsKey(itemType)) {return;

}//移除内容

itemMap.remove(itemType);

}

}/***@paramunitNameList the unitNameList to set*/

public void setUnitNameList(ListunitNameList) {synchronized (this.unitNameList){if(this.unitNameList != null && this.unitNameList.size() > 0) {return;

}this.unitNameList =unitNameList;

}

}

}

View Code

然后在dispatcher-servlet.xml中加入bean,或者在spring-bean.xml中,注意bean的位置要放在service注解被装载到spring容器中,且事务控制之后。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值