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

但数据字典表内容存在于数据库中,使用传统的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初始化的更多相关文章

  1. springmvc的初始化参数绑定

    一.springmvc的初始化参数绑定 此种和我们之前说的类型转换非常相似,可以看作是一种类型转换 在初始化参数绑定时  重要的是参数类型 -------------------单日期的绑定 二. 配 ...

  2. SpringMvc中初始化参数绑定

    初始化参数绑定与类型转换很类似,初始化绑定时,主要是参数类型 ---单日期 在处理器类中配置绑定方法  使用@InitBinder注解 在这里首先注册一个用户编辑器 参数一为目标类型   proper ...

  3. SpringMVC DispatcherServlet初始化过程

    先来上一张类的结构图: 图里仅仅画了跟初始化相关的方法. 首先DispatcherServlet也是一个Servlet,初始化从init()方法開始. 以下就详细看看ini()是怎么实现的吧. 1.S ...

  4. Spring MVC(一)--SpringMVC的初始化和流程

    SpringMVC是Spring提供给WEB应用的MVC框架,MVC框架一般来说由三部分组成: Model:模型层,一般由java bean完成,主要是进行数据库操作: View:视图层,用于前端展示 ...

  5. 当springMVC 容器初始化完成后执行某个方法

    分类: spring java2013-06-19 16:40 8289人阅读 评论(4) 收藏 举报 在某些应用中,我们希望,当spring 容器将所有的bean都初始化完成后,做一个操作(例如:将 ...

  6. SpringMVC 的初始化参数绑定

    初始化参数绑定:日期格式 一:首先我们先做一种日期格式的绑定,配置初始化参数绑定和自定义类型转换有着异曲同工之妙 配置步骤如下: 1.我们首先配置applicationContext.xml,进行扫描 ...

  7. SpringMVC源码分析--容器初始化(四)FrameworkServlet

    在上一篇博客SpringMVC源码分析--容器初始化(三)HttpServletBean我们介绍了HttpServletBean的init函数,其主要作用是初始化了一下SpringMVC配置文件的地址 ...

  8. 2.SpringMVC源码分析:DispatcherServlet的初始化与请求转发

    一.DispatcherServlet的初始化 在我们第一次学Servlet编程,学java web的时候,还没有那么多框架.我们开发一个简单的功能要做的事情很简单,就是继承HttpServlet,根 ...

  9. SpringMVC源码解析-DispatcherServlet启动流程和初始化

    在使用springmvc框架,会在web.xml文件配置一个DispatcherServlet,这正是web容器开始初始化,同时会在建立自己的上下文来持有SpringMVC的bean对象. 先从Dis ...

随机推荐

  1. kettle的资源库

    在kettle中的转换或者作业等资源的存储的仓库称为资源库:分为文件资源库.数据库资源库. 一个转换或者作业可以属于某个资源库或者一个单独的文件形态存在. 一.数据库资源库 1.1在mysql中创建一 ...

  2. Spark的启动进程详解

    Master和Worker是执行任务之前存在的进程 (类似于公司) Driver和Excutor是任务执行之后存在的进程(类似于公司接到项目后才成立的项目小组) 启动步骤: 启动Master资源管理进 ...

  3. APP自动化测试各项指标分析

    一.内存分析专项 启动App. DDMS->update heap 操作app,点几次GC dump heap hprof-conv转化 MAT分析 二.区分几种内存 VSS- Virtual ...

  4. mac上安装nginx

    终端执行: brew install nginx nginx 默认安装在 /usr/local/Cellar/nginx/1.12.2 conf 文件默认安装在 /usr/local/etc/ngin ...

  5. JS判断IP的正则表达式

    <html> <head> <title>最简洁的IP判断正则表达式</title> <meta http-equiv="Content ...

  6. VS2010程序调试

    http://blog.csdn.net/kingzone_2008/article/details/8133048 调试初识及实例.

  7. 关于IOS给我的启发

    用了将近一年半的iOS,从4到4S,iOS5到iOS6.这里谈谈自己对iOS的一些看法,以及这款移动操作系统给我的启发.我知道这个帖子发出来可能有点“危险”.我从不发水贴,这些积分都是大家给的,不是灌 ...

  8. Java之优先队列

    PriorityQueue属于Java Collections Framework.PriorityQueue基于优先级堆,它是Queue接口的实现.当我们需要一个Queue实现时,可以使用这种数据结 ...

  9. Parity 钱包启动配置

    Parity. Ethereum Client. By Wood/Paronyan/Kotewicz/Drwięga/Volf et al. Copyright 2015, 2016, 2017, 2 ...

  10. Kibana安装及使用

    1.Kibana介绍Kibana是一个基于浏览器页面的Elasticsearch前端展示工具.Kibana全部使用HTML语言和Javascript编写的. 2.安装配置Kibana下载地址:http ...