Spring - 使用ApplicationContextAware得到一个ApplicationContext对象

来源:互联网 发布:纽约 攻略 知乎 编辑:程序博客网 时间:2024/06/06 20:26

最近我我开发的一个系统里边有老的代码, 这些老代码没有使用Spring, 我们准备用Spring改写老代码, 但是写到一半, 发现问题很多,然后我们又不想丢掉我们写好的新代码, 所以我们就需要找到一个方法,使我们能够在老的代码里访问Spring的bean. 我们都知道要访问Spring bean 我们就必须得到一个ApplicationContext 或者 BeanFactory 对象, 而ApplicationContext的BeanFactory 的子类, 拥有更强大的功能,ApplicationContext可以在服务器启动的时候自动实例化所有的bean,而 BeanFactory只有在调用getBean()的时候才去实例化那个bean, 这也是我们为什么要得到一个ApplicationContext对象, 事实上Spring2相关的web应用默认使用的是ApplicationContext对象去实例化bean, 换一句话说, 在服务器启动的时候,Spring容器就已经实例化好了一个ApplicationContext对象,所以我们要在老的代码里尝试去获取这个对象。 但是如何才能得到一个ApplicationContext对象呢?方法很多,最常用的办法就是用ClassPathXmlApplicationContext, FileSystemClassPathXmlApplicationContext, FileSystemXmlApplicationContext 等对象去加载Spring配置文件,这样做也是可以, 但是在加载Spring配置文件的时候,就会生成一个新的ApplicaitonContext对象而不是Spring容器帮我们生成的哪一个, 这样就产生了冗余, 所以我们在这里不采用这种加载文件的方式,我们使用ApplicationContextAware让Spring容器传递自己生成的ApplicationContext给我们, 然后我们把这个ApplicationContext设置成一个类的静态变量, 这样我们就随时都可以在老的代码里得到Application的对象了。

 

ApplicationContextHelper

[java] view plaincopy
  1. import org.springframework.beans.BeansException;  
  2. import org.springframework.context.ApplicationContext;  
  3. import org.springframework.context.ApplicationContextAware;  
  4. /** 
  5.  * 
  6.  */  
  7. public class ApplicationContextHelper implements ApplicationContextAware {  
  8.     private static ApplicationContext appCtx;  
  9.     /** 
  10.      * 此方法可以把ApplicationContext对象inject到当前类中作为一个静态成员变量。 
  11.      * @param applicationContext ApplicationContext 对象. 
  12.      * @throws BeansException 
  13.      */  
  14.     @Override  
  15.     public void setApplicationContext( ApplicationContext applicationContext ) throws BeansException {  
  16.         appCtx = applicationContext;  
  17.     }  
  18.     /** 
  19.      * 这是一个便利的方法,帮助我们快速得到一个BEAN 
  20.      * @param beanName bean的名字 
  21.      * @return 返回一个bean对象 
  22.      */  
  23.     public static Object getBean( String beanName ) {  
  24.         return appCtx.getBean( beanName );  
  25.     }  
  26. }  
 

 

配置 ApplicationContextHelper

[c-sharp] view plaincopy
  1. <bean id="SpringApplicationContext" class="com.company.helper.ApplicationContextHelper"></bean>  

 

使用些列方法去得到一个bean

[c-sharp] view plaincopy
  1. BeanExample beanExample= (BeanExample )ApplicationContextHelper.getBean( "beanExample" );  

这样我们在老代码里取得了一个Spring配置的对象, 然后我们就可以自由自在的在老代码里边享受Spring提供的功能。


转载:http://blog.csdn.net/tohmin/article/details/6015289

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 苹果6id被锁了怎么办 苹果手机app密码忘了怎么办 好哥们借钱手上没钱怎么办 武汉ca证书u盾怎么办 判了刑发现还有漏案没判怎么办 高铁旅客漏乘怎么办 水库里面要养殖小龙虾最好怎么办 点读机的笔丢了怎么办 皮肤晒的很黑怎么办 电脑wifi连接受限制怎么办 高中孩子班管理松怎么办 脱式计算有余数怎么办 手机被别人绑定微信怎么办 饿了么入职查不到学历怎么办 高中没考上家人让打工怎么办 一建证书丢了怎么办 自考大专证书丢了怎么办 护士学分卡丢了怎么办 公司电脑只能用内网怎么办 遇见素质低的人怎么办 被素质低的人骂怎么办 对素质差的人怎么办 碰到素质低的人怎么办 和韩国人结婚后工作怎么办 大连明珠卡坏了怎么办 护肤品酒精含量太高怎么办 父母出国三年想孩子怎么办 孩子高考不理想想出国怎么办 交大附中创新班剩余孩子怎么办 棋牌开发公司倒闭了怎么办 7月1日本地流量怎么办 装电池的弹簧生锈了怎么办 电器被电池碱了怎么办 车辆被交警拖走怎么办 香烟熏的眼睛疼怎么办 想在中牟住5天怎么办 腰弯了直不了怎么办 自考科目停考了怎么办 把wlan密码忘了怎么办 滕州不给报新婚怎么办 体内锁水能力差怎么办