gpt4 book ai didi

java - Spring bean 实例化顺序

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:36:26 24 4
gpt4 key购买 nike

我遇到了 Bean 实例化顺序很重要的问题。目前,下面的 Bean3 正在运行基于数据库的缓存放置操作,Bean 1 使用代理 Bean2 查询新创建的缓存。优先级是 Bean3 和 Bean 2 在 Bean1 被实例化之前完全实例化,即当 Spring 容器出现时。这些 bean 位于单独的 JARS 中,Bean2 对 Bean1 的引用未使用 Autowiring 。相反,服务定位器正在为其提供引用。我们使用 Spring 2.5.2 而不是使用 XML 来实例化 bean。任何帮助表示赞赏!

  • JAR1( Spring 项目)

    @Service ("bean3")   
    public class Bean3 implements ApplicationListener {
    public void onApplicationEvent() {
    //load data from DB and populate cache
    }
    public void getCache(){
    //get data from cache
    }

    }

    @Service ("bean2")
    public class Bean2 {
    @Autowired
    private Bean3 bean3;
    private void methodA(){
    bean3.getCache();
    }
    }
  • JAR2(非 Spring 项目)

    public class Bean1{  
    Bean2 bean2 = SpringServiceLocator.getBean("bean2")
    public void methodB(){
    bean2.methodA();
    }
    }

最佳答案

如果我没理解错的话,您正试图在应用程序启动时执行一些逻辑(上下文初始化)。

如果是这种情况,我建议您使用 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;
}
}

不要忘记告诉 Spring 你的后处理器

<context:component-scan base-package="some.package" />
<bean class="some.package.MyBeanPostProcessor"

有关更多信息,请阅读此处 http://static.springsource.org/spring/docs/3.0.0.M3/reference/html/ch04s07.html

希望对您有所帮助。

关于java - Spring bean 实例化顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13845775/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com