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 ...
随机推荐
- socat 简单试用
socat的主要特点就是在两个数据流之间建立通道:且支持众多协议和链接方式: ip, tcp, udp, ipv6, pipe,exec,system,open,proxy,openssl,socke ...
- JAVA中@SuppressWarnings注解的作用
eclipse中开发JAVA代码时,经常会出现编译告警符号,影响代码可读性,也影响调试的断点符号正常显示,可以使用@SuppressWarnings注解来抑制这些告警符号的再现.1.抑制单个类型的告警 ...
- 【转】每天一个linux命令(21):find命令之xargs
原文网址:http://www.cnblogs.com/peida/archive/2012/11/15/2770888.html 在使用 find命令的-exec选项处理匹配到的文件时, find命 ...
- ORA-25205: the QUEUE SYS.KUPC$S_1_20180123193821 does not exist
[oracle@hbjfdba:/oratmp]#expdp \'XXX as sysdba\' DIRECTORY=TMP_DUMP_DIR DUMPFILE=NEW_LOCAL_HB_DMN_%U ...
- JMeter--详解JMeter配置元件
JMeter配置元件可以用来初始化默认值和变量,以便后续采样器使用.将在其作用域的初始化阶段处理. CSV Data Set Config:被用来从文件中读取数据,并将它们拆分后存储到变量中,适合处理 ...
- IPv6调用java后端接口报错:java.net.SocketException: Protocol family unavailable
目前需求是java后端的接口需要支持IPv6.先确认linux机器已经绑定了IPv6: CMREAD-SV43 apache-tomcat/bin> ifconfig eth0 Link enc ...
- 【Oracle学习笔记-3】关于Oracle 10g中各种服务解析
[原创]关于oracle 10g中各种服务解析 (2014/10/16 8:39:40) 时间:2014-10-16 8-58-30 作者:ssslinppp 1. 当首次安装oracle 1 ...
- R语言学习——向量,矩阵
在R中,基本的数据结构有:向量,矩阵,数组,数据框,列表,因子,函数等. 向量:一系列同类型的有序元素构成. 向量是一维结构. 向量是R最简单的数据结构,在R中没有标量. 标量被看成1个元素的向量. ...
- 过度使用DBLINK做系统集成会带来的问题
过度使用DBLINK做系统集成会带来很多问题,问题主要由以下几点: 1. 大量消耗数据库资源: 本地系统每通过DBLINK链接远端系统一次,都会生成一个本地session,如本地session不退出或 ...
- shell 10流程控制
if 判断 if #shell #!/bin/sh a=5 if [[ $a > 3 ]];then echo "$a>3" fi #写成一行 if [[ $a < ...