应用完全启动后, Spring执行自定义初始化
来源:互联网 发布:python range迭代器 编辑:程序博客网 时间:2024/06/04 19:08
//==>Dec31
后来又找到一种初始化方法:
是利用org.springframework.beans.factory.InitializingBean的afterPropertiesSet()方法,
不用手动判断,感觉更好一点
/** * 应用完全启动后, Spring执行自定义初始化 * 此处初始化避免了初始化static时 bean还没注入的问题 * @author tao */public class InstantiationListener implements InitializingBean {//==>继承于InitializingBean 的afterPropertiesSet()方法是初始化方法public void afterPropertiesSet(){//1.敏感词词库初始化try{new HeXieWordFinder().initWords(heXieWordService);}catch(Exception e){throw new AppInitException("初始化异常:敏感词词库");} //2.邮件发送器 try{ new EmailSender().init(userService);}catch(Exception e){throw new AppInitException("初始化异常:邮件发送器");} //3.省地市数据中"省"json初始化 try{ new CityController().initProvinceJson(cityService.getAllProvince());}catch(Exception e){throw new AppInitException("初始化异常:“省”json");} }@Autowiredprivate HeXieWordService heXieWordService;//这里注入不会有生存周期的问题@Autowiredprivate UserService userService;@Autowiredprivate CityService cityService;}//==>
项目中做敏感词过滤,
因为前台ajax校验要走service ,而后台统一过滤器要走interceptor , 所以把检查器提到一个工具类(HeXieWordFinder)里
这个工具类理应缓存数据库中所有敏感词数据的list
可是直接初始化静态变量的话 spring会报出nullPointer (因为容器首先初始化个各类(static) 而后才是依赖注入)
研究了一下初始化过程 ,才想出在spring完全启动之后 这个时间点上手动初始化的办法
1.监听器
/** * spring初始化结束后,执行onApplicationEvent方法 * 此处初始化避免了初始化static时 bean还没注入的问题 * @author tao */public class InstantiationTracingBeanPostProcessor implements ApplicationListener<ContextRefreshedEvent> { @Override public void onApplicationEvent(ContextRefreshedEvent event) { if(event.getApplicationContext().getParent() == null)//root applicationContext没有parent,保证是统一的context { //需要执行的逻辑代码,当spring容器初始化完成后就会执行该方法。 HeXieWordFinder h = new HeXieWordFinder(); h.initWords(heXieWordService); } } @Autowiredprivate HeXieWordService heXieWordService;//这里注入不会有生存周期的问题}
2.spring的xml里配个bean
<bean class="com.tdt.listener.InstantiationTracingBeanPostProcessor"/>
3.查找器(缓存list)
/** * 敏感词查找器 * @author tao */@Componentpublic class HeXieWordFinder {private static List<String> SensitiveWords = new ArrayList<String>();//禁用词 public HeXieWordFinder() {super();}/*private static HeXieWordFinder singletonInstance;//单例public static synchronized HeXieWordFinder getInstance()//线程安全{ if (singletonInstance == null){ singletonInstance = new HeXieWordFinder(); } return singletonInstance; }*/public void initWords(HeXieWordService heXieWordService){ synchronized(SensitiveWords) { //此处如果用@Autowired注入报nullPointer ,因为容器首先初始化个各类(static) 而后才是依赖注入 List<HeXieWord> wordList = heXieWordService.getAllHeXieWord();if( null != wordList ){for(int i=0,len=wordList.size();i<len;i++){SensitiveWords.add(wordList.get(i).getWord());}} } } public static boolean find(String value)//static{boolean res = false;if( null==value || 0==value.length()){return res;}for(String regex : SensitiveWords) { Pattern p = Pattern.compile(regex);//正则表达式判断用户输入的内容是否存在 Matcher m = p.matcher(value); if(m.find()) { res = true; return res; } }return res;}}
0 0
- 应用完全启动后, Spring执行自定义初始化
- Spring容器初始化后执行自定义的业务操作
- Spring启动后执行
- Spring启动后执行
- Spring启动后执行
- Spring启动后执行
- Spring启动后执行
- Spring启动后执行
- spring初始化后执行操作
- 转:Spring启动后执行
- Spring启动后再执行
- Spring容器初始化后执行的方法
- spring启动完成后执行特定代码
- spring启动自动后执行特定方法
- 当spring 容器初始化完成后执行某个方法
- 当spring 容器初始化完成后执行某个方法
- 当spring 容器初始化完成后执行某个方法
- spring 容器初始化完成后执行某个方法
- NYOJ 86 找球号(一)
- AspectJ
- 黑马程序员——java语言基础组成
- ElGamal的数据加密
- 未能加载文件或程序集另类解决办法
- 应用完全启动后, Spring执行自定义初始化
- 通用日志(Log)模块设计
- opencv 将BGR转为HSV
- myibatis--学习点滴
- ZOJ-1755
- Log4Net使用指南
- QT4 自我总结(一)
- oracle角色管理
- 网络资源的下载安装