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

但数据字典表内容存在于数据库中,使用传统的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. 转 微软发布TX(LINQ To Logs And Traces)

    作者 Roopesh Shenoy ,译者 马德奎 发布于 一月 09, 2014 | 微软开源技术公司于近日发布了Tx,这是一个开源项目,可以使用日志/跟踪文件辅助调试,以及创建实时监控和告警系统. ...

  2. FastAdmin 插件的 Git 开发流程(简明)

    FastAdmin 插件的 Git 开发流程(简明) cms zip 安装 包安装 删除 addons 里的 cms 使用 mklink 软链接到 cms 插件 Git 仓库 修改 cms 插件 gi ...

  3. iview admin 发布到IIS

    公司项目打算做前后端分离,选型最后选了vue+webapi的模式.于是在网上找到了iview及iview admin 这个后台管理模板,里面东西很完善.有这么好的东西,而且MIT协议,项目本身也比较简 ...

  4. tomcat源码阅读之StandardWrapper解析

    一.UML图: 1.Tomcat中Wrapper代表一个独立的servlet实例,StandardWrapper类是Wrapper接口的标准实现类,StandardWrapper类还实现了Selvle ...

  5. POJ1006——中国剩余定理

    题目:http://poj.org/problem?id=1006 中国剩余定理:x= m/mj + bj + aj 讲解:http://www.cnblogs.com/MashiroSky/p/59 ...

  6. 零基础学习hadoop开发所必须具体的三个基础知识

    大数据hadoop无疑是当前互联网领域受关注热度最高的词之一,大数据技术的应用正在潜移默化中对我们的生活和工作产生巨大的改变.这种改变给我们的感觉是“水到渠成”,更为让人惊叹的是大数据已经仅仅是互联网 ...

  7. 学hadoop需要什么基础

    最近一段时间一直在接触关于hadoop方面的内容,从刚接触时的一片空白,到现在也能够说清楚一些问题.这中间到底经历过什么只怕也就是只有经过的人才会体会到吧.前几天看到有个人问“学hadoop需要什么基 ...

  8. springcould

     [Spring For All 社区周报] 「社区活动」(送书哦)Spring For All 第 1 期高手 QA 环节 — Spring Cloud 微服务实战http://spring4all ...

  9. [ASP.NET MVC2 系列] ASP.Net MVC教程之《在15分钟内用ASP.Net MVC创建一个电影数据库应用程序》

    [ASP.NET MVC2 系列]      [ASP.NET MVC2 系列] ASP.Net MVC教程之<在15分钟内用ASP.Net MVC创建一个电影数据库应用程序>       ...

  10. vmware linux NAT CON

    NAT上网 vmware设置nat上网: 1.设置本地可提供上网网卡为共享方式到vmware 8(NAT)如下图: 2.设置本地虚拟网卡vmware8 IP地址如下图: 3.设置vmware网络设置启 ...