博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring的ApplicationContext加载备忘
阅读量:5899 次
发布时间:2019-06-19

本文共 2079 字,大约阅读时间需要 6 分钟。

最常用的办法就是用 ClassPathXmlApplicationContext, FileSystemClassPathXmlApplicationContext, FileSystemXmlApplicationContext 等对象去加载Spring配置文件,这样做也是可以, 但是在加载Spring配置文件的时候,就会生成一个新的ApplicaitonContext对象而不是Spring容器帮我们生成的哪一个, 这样就产生了冗余, 所以不采用应用程序手动加载文件的方式,而是使用ApplicationContextAware让Spring容器自动传递自己生成的 ApplicationContext到指定的类里。将来可以通过该类方便的访问spring的上下文。

 

1web工程使用的ApplicationContextAware类:

/**  * 以静态变量保存Spring ApplicationContext,可在任意代码中取出ApplicaitonContext.  * */ public class SpringContextHolder implements ApplicationContextAware {
private static ApplicationContext applicationContext; /** * 实现ApplicationContextAware接口的context注入函数, 将其存入静态变量. */ public void setApplicationContext(ApplicationContext applicationContext) {
SpringContextHolder.applicationContext =applicationContext; } /** * 取得存储在静态变量中的ApplicationContext. */ public static ApplicationContext getApplicationContext() {
checkApplicationContext(); return applicationContext; } /** * 从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型. */ @SuppressWarnings("unchecked") public static
T getBean(String name) {
checkApplicationContext(); return (T) applicationContext.getBean(name); } /** * 从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型. */ @SuppressWarnings("unchecked") public static
T getBean(Class
clazz) {
checkApplicationContext(); return (T) applicationContext.getBeansOfType(clazz); } private static void checkApplicationContext() {
if (applicationContext == null) throw new IllegalStateException("applicaitonContext未注入,请在applicationContext.xml中定义SpringContextUtil"); } }

同时需要在xml里定义这个bean,这样Spring在创建完ApplicationContext才会调用setApplicationContext(ApplicationContext applicationContext) 注入到类中,对于一些静态类由于无法使用注入而通过SpringContextHolder可以很方便的访问bean实例。

2.对于java工程,ApplicationContextAware的意义不是很大,因为普通java工程没有办法象web应用启动的时候,加载spring的上下文。所以,还是应用程序手动创建方便。比如在main方法中通过ClassPathXmlApplicationContext来获取Bean,而不是通过注入,因为注入是实例变量。另外,ClassPathXmlApplicationContext即使使用了注解仍然可以访问到Bean。与使用注解与否无关。

转载地址:http://ihhsx.baihongyu.com/

你可能感兴趣的文章
MonkeyRunner+PowerTutor简单耗电测试
查看>>
一、页面做完右侧留白
查看>>
WPF 对控件其类型的继承方式(七)
查看>>
apache安装,镇博
查看>>
test1
查看>>
Python - while循环
查看>>
NFS配置及详解
查看>>
结合Ngx_lua运用Nginx预加载热点数据
查看>>
.net 安装程序工具 (Installutil.exe)
查看>>
Linux下如何批量修改文件名
查看>>
shell编程
查看>>
Memcached简介
查看>>
top命令批量执行
查看>>
网管的未来出路与学习成长方向选择
查看>>
redis常用语法命令
查看>>
爬取妹子图片
查看>>
IBM Bluemix初识
查看>>
storm 大牛博文
查看>>
数据库技术-为什么在MySQL中只使用InnoDB
查看>>
amazon 汇总
查看>>