有没有办法在Spring中的bean配置文件中引用当前的应用程序上下文?
我正在尝试做这样的事情:
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd">
<bean id="some-bean-name" class="com.company.SomeClass">
<constructor-arg>
<!-- obviously this isn't right -->
<bean ref=#{this}/>
</constructor-arg>
</bean>
问题是SomeClass
在其构造函数中需要一个ApplicationContext实例。有没有办法获得正在加载bean的ApplicationContext的引用?我知道我可以在XML中完成所有的加载,但这不是我想要的,因为我需要在我的java代码中进行bean加载。
答案 0 :(得分:1)
您是否考虑过实施ApplicationContextAware
?它不会在构造函数中出现,但它确实在init()
调用之前发生,并且会在填充bean属性之后发生。
在普通bean属性的填充之后但在init之前调用 回调,如InitializingBean.afterPropertiesSet()或自定义 初始化方法。之后调用 ResourceLoaderAware.setResourceLoader(org.springframework.core.io.ResourceLoader) ApplicationEventPublisherAware.setApplicationEventPublisher(org.springframework.context.ApplicationEventPublisher) 和MessageSourceAware,如果适用的话。
public class SomeClass implements ApplicationContextAware {
//your class definition
private ApplicationContext myContext;
public void setApplicationContext(ApplicationContext context) throws BeansException {
myContext = context;
//load beans here maybe?
}
}
如果使用Spring 2.5或更高版本,您也可以@Autowire(d)
。
public class SomeClass {
//your class definition
@Autowired
private ApplicationContext myContext;
}
当然,执行其中任何一项操作都会将代码绑定到Spring。