您的位置:首页 > 编程语言 > Java开发

普通javaBean如何获取到spring托管对象

2015-03-28 12:33 645 查看
一些thread类或servlet不能通过spring注解的方式调用spring容器里面的类

尝试将thread或servlet加上@component或@controller注解变成被spring容器管理,再调用spring容器里面的其他类,失败!

最终找出下面两种解决方案:

一,通过spring配置文件applicationContext.xml初始化

[java] view plaincopy

import org.springframework.context.ApplicationContext;  

import org.springframework.context.support.FileSystemXmlApplicationContext;  

  

public class SpringUtil{  

    private static ApplicationContext applicationContext = null;  

      

    public static ApplicationContext getApplicationContext() {  

        if(applicationContext == null){  

            applicationContext = new FileSystemXmlApplicationContext("applicationContext.xml");  

        }  

        return applicationContext;  

    }  

}  

缺点:

这里面的applicationContext.xml是全文件路径,这也是这种方式不是很灵活的原因之一,

调用SpringUtil会创建一次ApplicationContext对象.如果将static去掉改为非静态,那么每次调用该方法时都会new一个该对象,效率应该会更差.

二,通过实现ApplicationContextAware接口

在spring初始化时,会通过该接口实现的setApplicationComtext方法将ApplicationContext对象注入到该类中,具体见下面

我的解决方式选择该种:
1、定义SpringUtil

import org.springframework.beans.BeansException;  

import org.springframework.context.ApplicationContext;  

import org.springframework.context.ApplicationContextAware;  

  

public class SpringUtil implements ApplicationContextAware {  

  

    private static ApplicationContext applicationContext;  

  

    public static ApplicationContext getApplicationContext() {  

        return applicationContext;  

    }  

  

    public void setApplicationContext(ApplicationContext applicationContext)throws BeansException {  

        SpringUtil.applicationContext = applicationContext;  

    }  
}  

2、spring的配置文件加入

<bean id="applicationContext" class="com.lefu.pushCore.other.SpringUtil"/>   

3、通过如下方法便能获取到所有由spring管理的对象了:

PushController pushController = (PushController) SpringUtil.getApplicationContext().getBean("pushController");

参考文章:http://blog.csdn.net/a19881029/article/details/7842070
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息