如何通过代码直接获得Spring容器中的Bean?

 我来答
玩弄到
2013-08-24 · 超过75用户采纳过TA的回答
知道答主
回答量:143
采纳率:0%
帮助的人:68.9万
展开全部
[引文]通常在struts2+spring的例子上,要想使用spring的Bean,可以在applicationContext.xml加上如下配置 <bean id="springBean" scope="prototype" class="" <property name="name" value="chen"/</bean<bean id="myAction" scope="prototype" class="" <property name="springBean" ref="springBean"/</bean如果是j2ee应用,启动web应用时将会自动加载ApplicationContext实例(Spring容器负责创建Bean实例) 一旦struts2的myAction实例化,其中的SpringBean也会被自动注入进来,从而达到使用SpringBean的目的。 [问题]但是仍有需要通过代码来调用SpringBean的情况: 1)对于不是由spring创建管理的类,如在java 代码中直接使用new去创建一个对象,并且想在这个对象中使用 SpringBean;因为这个对象并不是由Spring容器创建管理的类,所以即使它有setter方法,容器的springBean也不会被注入。 2)动态更改springBean中的属性值,如在代码运行时,name值需要发生变动; 3)对于一个独立的应用程序[解决]定义一个非Spring容器创建管理的类 public class NonSpringClass implements ServletContextAware { private SpringBean springBean; //如果 testGetBean不是被Spring容器创建管理,即使它有setter方法,容器的springBean也不会被注入。 public void setSpringBean(SpringBean springBean){this.springBean=springBean;}//利用ApplicationContext 从spring容器中获得springBean; //Spring有两个核心接口BeanFactory和ApplicationContext,其中ApplicationContext是BeanFactory的子接口, //它们代表了Spring容器,Spring容器是产生Bean的工厂,用于管理容器中的Bean。 public NonSpringClass (){//ApplicationContext acx = new ClassPathXmlApplicationContext("applicationContext.xml"); ApplicationContext acx = new FileSystemXmlApplicationContext("src/WEB-INF/applicationContext.xml"); springBean=(SpringBean)acx.getBean("springBean");}}调用这个类的代码: import com.NonSpringClass; public class TestCode { private NonSpringClass nonSpringClass; //这样nonSpringClass里将包含Spring容器创建的springBean}}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式