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 ...
随机推荐
- 来自官方的一些dbt 最佳实践
限制对原始数据的依赖性 您的项目将取决于存储在数据库中的原始数据.我们建议制作所谓的“基本模型”,以最大限度地减少对原始数据表的依赖性.在此约定中,基本模型可以具有以下职责: 仅选择与当前分析相关的字 ...
- Vquery PHP 简单爬虫类
http://www.thinkphp.cn/topic/36693.html 在使用php进行网页抓取的时候你有没有感觉到用起来比较麻烦呢?目前我还没有发现php有这样针对网页抓取的类,每次用到这个 ...
- tomcat源码阅读之单点登录
一.SSO概念: 单点登录,Single Sign-On,简写为 SSO,是一个用户认证的过程,允许用户一次性进行认证后,就可访问系统中不同的应用:而无需要访问每个应用时,都重新输入用户和密码. 实现 ...
- linux 下git使用教程
#添加所有新增文件 git add . #提交所有修改,包括删除,添加,修改 git add -A git add --all #查看状态 git status #添加一个文件 git add rea ...
- VT-x is not available. (VERR_VMX_NO_VMX) on windows 8
've installed virtualbox on windows 8 x64, then when I open linux guest machine, I got this error me ...
- valgrind的使用--检测内存
valgrind主要检测内存的使用情况,检测有否内存泄露等. 比如:test_va2.cpp #include<iostream> using namespace std; int mai ...
- listener does not currently know of 。。。。
打开Oracle的 listener.ora 文件: (../oracle/product/10.2.0/db_1/network/admin/listener.ora) 设置环境变量: Oracle ...
- 小甲鱼-013元组tuple:上了枷锁的列表
1.创建和访问一个元组 1.1创建元组 元组的标志性符号是 , tuple1 = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10) #定义单个元素的元组,要加 , tuple2 = (1 ...
- shell 13文件包含
同其他语言一样,shell也可以包含外部脚本.执行引用脚本可以使用source或 . 示例1 test.sh #shell #!/bin/sh echo "test.sh开始执行" ...
- 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 ...