zoukankan      html  css  js  c++  java
  • 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;
            }
        }
    }
    View Code

     然后在dispatcher-servlet.xml中加入bean,或者在spring-bean.xml中,注意bean的位置要放在service注解被装载到spring容器中,且事务控制之后。

    <!-- 初始化操作 -->
        <bean id="initDataListener" class="com.*.common.listener.InitDataListener"></bean>
  • 相关阅读:
    SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder"
    Tomcat跨域
    Invalid bean definition with name 'dataSource' defined in class path resource [applicationContext.xml]
    网速测试
    程序员实用工具网站
    安装wls报(主清单位置 "/u01/app/oracle/inventory" 无效 (无法读取/写入/执行))
    pom.xml
    CUDA -- 内存分配
    最长上升子序列(LIS: Longest Increasing Subsequence)
    实例化渲染
  • 原文地址:https://www.cnblogs.com/DennyZhao/p/8516178.html
Copyright © 2011-2022 走看看