springmvc initial初始化
项目需求是在启动服务时,将某些内容放入到共同里面,例如数据字典表内容。
但数据字典表内容存在于数据库中,使用传统的listener在加载时,无法获取service实例,打开事务控制。
springmvc提供了几个接口,可以在启动时执行。
InitializingBean和ServletContextAware都可以添加。
因加载的内容大多都是全局共用,因此可用servletContext来存储,在使用的地方获取即可。
如果使用单例模式存储对象,可使用InitializingBean,将数据放入到单例对象中。
/**
* 系统初始化完毕后则会执行此方法
* @Description:
* @author DennyZhao
* @date 2018年3月6日
* @version 1.0
*/
public class InitDataListener implements InitializingBean,ServletContextAware { /**
* 单位名称服务类
*/
@Inject
private UnitService unitService; /**
* 列表服务类
*/
@Inject
private ItemsService itemsService; /**
* 根据单位服务类获取单位名称
*/
@Override
public void afterPropertiesSet() throws Exception {
SingleItems singleItem = SingleItems.getInstance();
// 获取所有的单位名称
List<UnitDO> unitAllList = unitService.getUnitAllList();
List<String> unitNameList = new ArrayList<String>();
unitAllList.forEach(unitDO -> {
unitNameList.add(unitDO.getUnitName());
});
singleItem.setUnitNameList(unitNameList);
// 获取所有的列表
Map<String, List<String>> allItemsMap = itemsService.getAllItemsMap();
singleItem.setItemMap(allItemsMap);
} @Override
public void setServletContext(ServletContext servletContext) {
} }
单例对象见Java下的单例模式:
创建模式--单例模式Singleton(JAVA)
package com.pccw.solutions.retire.common.model; import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import javax.inject.Singleton; import org.apache.commons.collections.MapUtils; /**
* 创建单例模式对象,全局共用一个对象,将所有的查询Item结果放入到此对象中
* @Description:
* @author DennyZhao
* @date 2018年3月6日
* @version 1.0
*/
@Singleton
public class SingleItems implements Serializable{ /**
* 自动生成序列号
*/
private static final long serialVersionUID = -3893810440799071288L; /**
* 实例对象
*/
private static final SingleItems SINGLE_ITEMS = new SingleItems(); /**
* 单位名称列表
*/
private List<String> unitNameList = new ArrayList<String>(); /**
* Item全局对象
*/
private Map<String, List<String>> itemMap = new HashMap<String, List<String>>(); private SingleItems() {
} /**
* set ItemMap
* @param itemMap
*/
public void setItemMap(Map<String, List<String>> itemMap) {
synchronized (this.itemMap){
if(this.itemMap != null && !MapUtils.isEmpty(this.itemMap)) {
return;
}
this.itemMap = itemMap;
}
} /**
* 获取单例对象
* @return
*/
public static SingleItems getInstance() {
return SINGLE_ITEMS;
} /**
* 单位名称检查
* @param unitName
* @return
*/
public boolean checkUnitName(String unitName) {
return unitNameList.contains(unitName);
} /**
* 添加内容
* @param itemType
* @param itemList
*/
public void addItem(String itemType, List<String> itemList) {
synchronized (itemMap){
// 判断是否已经存在
if(itemMap.containsKey(itemType)) {
return;
}
// 添加
itemMap.put(itemType, itemList);
}
} /**
* 根据项类型,和项名称判断是否存在此名称
* @param itemType
* @param itemName
* @return
*/
public boolean checkItem(String itemType, String itemName) {
List<String> itemList = itemMap.get(itemType);
if(itemList == null || itemList.size() == 0) {
return false;
}
return itemList.contains(itemName);
} /**
* 获取Item列表
*/
public List<String> getItem(String itemType){
List<String> itemList = itemMap.get(itemType);
return itemList;
} /**
* 移除内容
*/
public void removeItem(String itemType) {
synchronized (this.itemMap){
// 判断是否已经存在
if(!itemMap.containsKey(itemType)) {
return;
}
// 移除内容
itemMap.remove(itemType);
}
} /**
* @param unitNameList the unitNameList to set
*/
public void setUnitNameList(List<String> unitNameList) {
synchronized (this.unitNameList){
if(this.unitNameList != null && this.unitNameList.size() > 0) {
return;
}
this.unitNameList = unitNameList;
}
}
}
然后在dispatcher-servlet.xml中加入bean,或者在spring-bean.xml中,注意bean的位置要放在service注解被装载到spring容器中,且事务控制之后。
<!-- 初始化操作 -->
<bean id="initDataListener" class="com.*.common.listener.InitDataListener"></bean>
springmvc initial初始化的更多相关文章
- springmvc的初始化参数绑定
一.springmvc的初始化参数绑定 此种和我们之前说的类型转换非常相似,可以看作是一种类型转换 在初始化参数绑定时 重要的是参数类型 -------------------单日期的绑定 二. 配 ...
- SpringMvc中初始化参数绑定
初始化参数绑定与类型转换很类似,初始化绑定时,主要是参数类型 ---单日期 在处理器类中配置绑定方法 使用@InitBinder注解 在这里首先注册一个用户编辑器 参数一为目标类型 proper ...
- SpringMVC DispatcherServlet初始化过程
先来上一张类的结构图: 图里仅仅画了跟初始化相关的方法. 首先DispatcherServlet也是一个Servlet,初始化从init()方法開始. 以下就详细看看ini()是怎么实现的吧. 1.S ...
- Spring MVC(一)--SpringMVC的初始化和流程
SpringMVC是Spring提供给WEB应用的MVC框架,MVC框架一般来说由三部分组成: Model:模型层,一般由java bean完成,主要是进行数据库操作: View:视图层,用于前端展示 ...
- 当springMVC 容器初始化完成后执行某个方法
分类: spring java2013-06-19 16:40 8289人阅读 评论(4) 收藏 举报 在某些应用中,我们希望,当spring 容器将所有的bean都初始化完成后,做一个操作(例如:将 ...
- SpringMVC 的初始化参数绑定
初始化参数绑定:日期格式 一:首先我们先做一种日期格式的绑定,配置初始化参数绑定和自定义类型转换有着异曲同工之妙 配置步骤如下: 1.我们首先配置applicationContext.xml,进行扫描 ...
- SpringMVC源码分析--容器初始化(四)FrameworkServlet
在上一篇博客SpringMVC源码分析--容器初始化(三)HttpServletBean我们介绍了HttpServletBean的init函数,其主要作用是初始化了一下SpringMVC配置文件的地址 ...
- 2.SpringMVC源码分析:DispatcherServlet的初始化与请求转发
一.DispatcherServlet的初始化 在我们第一次学Servlet编程,学java web的时候,还没有那么多框架.我们开发一个简单的功能要做的事情很简单,就是继承HttpServlet,根 ...
- SpringMVC源码解析-DispatcherServlet启动流程和初始化
在使用springmvc框架,会在web.xml文件配置一个DispatcherServlet,这正是web容器开始初始化,同时会在建立自己的上下文来持有SpringMVC的bean对象. 先从Dis ...
随机推荐
- WebApi_基于Token的身份验证——JWT
JWT是啥? JWT就是一个字符串,经过加密处理与校验处理的字符串,形式为: A.B.C A由JWT头部信息header加密得到B由JWT用到的身份验证信息json数据加密得到C由A和B加密得到,是校 ...
- Selenium2+python自动化40-cookie相关操作
前言 虽然cookie相关操作在平常ui自动化中用得少,偶尔也会用到,比如登录有图形验证码,可以通过绕过验证码方式,添加cookie方法登录. 登录后换账号登录时候,也可作为后置条件去删除cookie ...
- bzoj1072排列
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1072 好像是这方面的裸题. 整除k 要想转移需要记录下 达到模k所有余数 的方案数. 为了生 ...
- WifiMonitor的事件发放
Wifi框架中WifiMonitor负责上报wpa_supplicant的消息给WifiStateMachine,WifiNative负责将WifiStateMachine的消息下发给wpa_supp ...
- 在VS2010中配置ICE插件的步骤
ICE为不同的IDE都提供了插件.本文介绍VS2010下的配置. 首先建立一个控制台工程,以此为例,进行介绍. 1.激活插件 选择工具-> IceConfiguration或者在工程右键选择Ic ...
- css transition transform animation例子讲解
1.transition属性: transition属性是一个速记属性有四个属性:transition-property , transition-duration, transition-timin ...
- AppScan代理扫描app/H5安全测试(没试过,记录在此)
标签: 1.首先设置AppScan代理,设置如下:
- RDD之二:原理
RDD简介 在集群背后,有一个非常重要的分布式数据架构,即弹性分布式数据集(Resilient Distributed Dataset,RDD).RDD是Spark的最基本抽象,是对分布式内存的抽象使 ...
- 廖雪峰Java1-2Java程序基础-3整数运算
1.四则运算规则 int i =(100 + 200) * (99 -88);//3300 int n = i + 9;//3309 //除法结果为整数 int q = n / 100;//33 // ...
- 1033 To Fill or Not to Fill (25 分)
1033 To Fill or Not to Fill (25 分) With highways available, driving a car from Hangzhou to any other ...