2007-10-27
spring 依赖注入到直接new 对象
关键字: spring 当为遗留系统加入spring时,经典问题就是遗留系统需要引用spring管理的bean。幸好spring有机制可以处理这些。
建一个类实现ApplicationContextAware接口,有一个引用ApplicationContext的静态成员,然后,遗留系统需要引用spring管理的bean的地方,使用这个类。
1.比如:我这里建一个SpringContext类
package net.blogjava.chenlb;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
/**
* 此类可以取得Spring的上下文.
* Spring 使new方法创建的对象可以引用spring管理的bean.
* 2007-10-18 上午11:12:33
* @author chenlb
*/
public class SpringContext implements ApplicationContextAware {
protected static ApplicationContext context;
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
context = applicationContext;
}
public static ApplicationContext getContext() {
return context;
}
}
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
/**
* 此类可以取得Spring的上下文.
* Spring 使new方法创建的对象可以引用spring管理的bean.
* 2007-10-18 上午11:12:33
* @author chenlb
*/
public class SpringContext implements ApplicationContextAware {
protected static ApplicationContext context;
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
context = applicationContext;
}
public static ApplicationContext getContext() {
return context;
}
}
2.然后在spring配置文件里加
<bean id="springContext" class="net.blogjava.chenlb.SpringContext"></bean>
3.其它类中引用
MyBean myBean = (MyBean) SpringContext.getContext().getBean("myBean");
4.如果老是写SpringContext.getContext().getBean("...");麻烦,可以建一个工厂类来返回你要的bean
package net.blogjava.chenlb;
public class MyServerFactory {
public static MyBean1 getMyBean1() {
return (MyBean1) SpringContext.getContext().getBean("myBean1");
}
}
public class MyServerFactory {
public static MyBean1 getMyBean1() {
return (MyBean1) SpringContext.getContext().getBean("myBean1");
}
}
^_^
评论
抛出异常的爱
2007-11-13
引用
看来,也有人同我这样应用需要的朋友. 我在两个项目遇到这个问题,而且都这种方式解决,个人觉得还没有发现更好的解决方式. 其中一个项目是重做的,重做的时候不用之前做好的一些东西. 之前的类在构造函数里要初始化一此资源(现在 这此被spring管理了), 所以这此类的构造里要引用spring管理的bean, 解决方法是: SpringContext.getContext()... 第二个项目是,系统要用到一个组件,这个组件是用xml定义生成对象的,所以这些生成的对象不能引用spring管 理的bean, 解决方式是:
在这个组件xml定义的类里用工厂方法模式:
所有用到PrintManager(spring管理的)的类
(定义不能放到spring中,而是放到组件xml定义的)
都用 ServerFactory.getPrintManager()得到spring管理的PrintManager 有时间整理一下,
我在项目的用过的这种模式,与大家一起讨论.
javaeye编辑帖子,很不爽,不会分段. :o
在这个组件xml定义的类里用工厂方法模式:
public static PrintManager getPrintManager() {
return (PrintManager) SpringContext.getContext().getBean("printManager");
}
所有用到PrintManager(spring管理的)的类
(定义不能放到spring中,而是放到组件xml定义的)
都用 ServerFactory.getPrintManager()得到spring管理的PrintManager 有时间整理一下,
我在项目的用过的这种模式,与大家一起讨论.
javaeye编辑帖子,很不爽,不会分段. :o
手动bbcode
chenlb
2007-11-13
看来,也有人同我这样应用需要的朋友.
我在两个项目遇到这个问题,而且都这种方式解决,个人觉得还没有发现更好的解决方式.
其中一个项目是重做的,重做的时候不用之前做好的一些东西. 之前的类在构造函数里要初始化一此资源(现在
这此被spring管理了), 所以这此类的构造里要引用spring管理的bean, 解决方法是:
SpringContext.getContext()...
第二个项目是,系统要用到一个组件,这个组件是用xml定义生成对象的,所以这些生成的对象不能引用spring管
理的bean,
解决方式是:在这个组件xml定义的类里用工厂方法模式:
public static PrintManager getPrintManager() {
return (PrintManager) SpringContext.getContext().getBean("printManager");
}
所有用到PrintManager(spring管理的)的类(定义不能放到spring中,而是放到组件xml定义的)都用
ServerFactory.getPrintManager()得到spring管理的PrintManager
有时间整理一下,我在项目的用过的这种模式,与大家一起讨论.
javaeye编辑帖子,很不爽,不会分段. :o
myyate
2007-11-06
谢谢,正好可以用上了。
如果楼主能够给多点代码,或者完整一点的就好了。总感觉这样给出草草的。
PS:大侠们,给个入门没话说,投隐藏就真无语了!
如果楼主能够给多点代码,或者完整一点的就好了。总感觉这样给出草草的。
PS:大侠们,给个入门没话说,投隐藏就真无语了!
trendcom
2007-11-02
谢谢这个帖子 。。正好我需要加载一个bean,,但没有办法注入近来。。使用一些方法总是有些问题。。这个代码正好完全满足我的要求
chenlb
2007-11-01
有遗留系统的类没法配置到spring的bean里.
lszone
2007-10-29
为什么不把要用到spring的bean配置到ApplicationContext里面?
发表评论
提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则
- 浏览: 8974 次
- 性别:

- 来自: 广州

- 详细资料
搜索本博客
我的相册
法拉利
共 2 张
共 2 张
最近加入圈子
最新评论
-
[原]自己实现的优先队列 ...
lucene 2.32 中用来实现查询结果存放缓存的时候 在代码里有一个这 ...
-- by moshalanye -
Levenshtein Distance(LD) ...
抄袭检测是,参考: http://www.merriampark.com/ld. ...
-- by chenlb -
Levenshtein Distance(LD) ...
我觉得这个在检查抄袭上估计不行,这个方法好像更关注交换程度,因为抄袭是关键词差不 ...
-- by minstrel -
[原]自己实现的优先队列 ...
引用于是,在有空的时间里写了一下。内容是一个双向链表(带头的,头不作保存数据), ...
-- by stephen -
[原]自己实现的优先队列 ...
取决于你需要解决的问题,插入排序用TreeSet。 插入和移除手段可以多样,真正 ...
-- by llade






评论排行榜