Noo*_*ere 7 java spring java-ee applicationcontext
我遇到了Bean实例化排序很重要的问题.目前,Bean3从下面运行基于数据库的缓存放置操作,Bean 1使用Proxy Bean2查询新创建的缓存.优先级是Bean3和Bean 2在Bean1实例化之前完全实例化,即当Spring容器出现时.这些bean是单独的JARS,Bean2对Bean1的引用不使用Autowired.而是服务定位器给它一个参考.我们使用的是Spring 2.5.2而不是使用XML来实例化bean.任何帮助赞赏!
JAR1(春季项目)
@Service ("bean3")
public class Bean3 implements ApplicationListener {
public void onApplicationEvent() {
//load data from DB and populate cache
}
public void getCache(){
//get data from cache
}
Run Code Online (Sandbox Code Playgroud)
}
@Service ("bean2")
public class Bean2 {
@Autowired
private Bean3 bean3;
private void methodA(){
bean3.getCache();
}
}
Run Code Online (Sandbox Code Playgroud)JAR2(非春季项目)
public class Bean1{
Bean2 bean2 = SpringServiceLocator.getBean("bean2")
public void methodB(){
bean2.methodA();
}
}
Run Code Online (Sandbox Code Playgroud)如果我理解正确,您正在尝试在应用程序启动(上下文初始化)时执行一些逻辑。
如果是这种情况,我建议您使用 BeanPostProcessor 在应用程序启动时执行任何特殊操作。
public class MyBeanPostProcessor implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName)
throws BeansException {
.. **perform special things**
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName)
throws BeansException {
..**perform special things**
return bean;
}
}
Run Code Online (Sandbox Code Playgroud)
不要忘记告诉 Spring 你的后处理器
<context:component-scan base-package="some.package" />
<bean class="some.package.MyBeanPostProcessor"
Run Code Online (Sandbox Code Playgroud)
欲了解更多信息,请阅读此处http://static.springsource.org/spring/docs/3.0.0.M3/reference/html/ch04s07.html
我希望这有帮助。
| 归档时间: |
|
| 查看次数: |
3204 次 |
| 最近记录: |