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

但数据字典表内容存在于数据库中,使用传统的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. 第2季:从官方例程深度学习海思SDK及API

    2.1.官方mppsample的总体分析2.1.sample的整体架构(1)sample其实是很多个例程,所以有很多个main(2)每一个例程面向一个典型应用,common是通用性主体函数,我们只分析 ...

  2. JUC集合之 CopyOnWriteArraySet

    CopyOnWriteArraySet介绍 它是线程安全的无序的集合,可以将它理解成线程安全的HashSet.有意思的是,CopyOnWriteArraySet和HashSet虽然都继承于共同的父类A ...

  3. DllPlugin、DllReferencePlugin 可以提取的第三方库列表

    DllPlugin.DllReferencePlugin 可以提取的第三方库列表: 'vue/dist/vue.esm.js', // 'vue/dist/vue.common.js' for web ...

  4. linux mutt的安装和使用

    首先介绍一下mutt这个软件,它是一款基于文字界面的邮件客户端,非常小巧,但功能强大,可以用它来读写,回复保存和删除你的邮件,能在linux命令行模式下收发邮件附件. 我只讲它很小的一部分功能,因为我 ...

  5. DEDECMS ShowMsg()样式修改 提示信息的修改以及美化

    织梦DedeCMS系统,处处都在用到提示信息,但是这个提示框,前台后台一层不变,太死板了,可能有很多人都有过去修改它的想法,只是苦于不知道去哪里 改.今天我就来说说这个吧,DedeCMS的所有提示信息 ...

  6. win xp firefox,chrome 在浏览网页时字体发虚,可以设置为新宋体

    firefox,chrome 在浏览网页时字体发虚,比如:驱动之家.可以设置为新宋体.

  7. iOS APP网络分析之rvictl(可以捕捉除了Wifi以外的网络类型)

    From: http://danqingdani.blog.163.com/blog/static/18609419520135204934551/ wireshark亲测可用. ********** ...

  8. yii framework config 可以被配置的项目

    http://hi.baidu.com/lossless1009/item/990fdb33a52ffcf1e7bb7a4c <?php002 003 // 取消下行的注释,来定义一个路径别名0 ...

  9. android 关于 webview 控制其它view的显示 以及更改view数据失败的问题总结

    总结: 1.webview 无法直接更改view的属性,可以通过 handler实现,因为跨线程 2.webview可以通过js api读取 view的属性值 代码: private Handler ...

  10. 【textarea】在JSP上添加textarea-文本域 调试使用

    <body> <form name="dataEventDisplay"> <table border="2" bordercol ...