【问题标题】:Spring 3 class to hold and return a single bean instance?Spring 3 类保存并返回单个 bean 实例?
【发布时间】:2016-07-21 16:14:42
【问题描述】:

假设我有一个 Spring bean,我想在整个应用程序中使用它,但因为它是遗留代码,所以我无法在 @Component 或任何类型的 bean 中使用它,因为该类正在整个项目中手动实例化,所以我不能只是 @Autowire 它在我想要的地方。

如何为我想要重用的 spring bean 创建一个包装器类,配置如下,以便它除了返回在应用程序上下文中注册的 bean 实例之外什么都不做?

@Service("myBean")
public class MyBean {

基本上我正在寻找类似MyBeanHolder.java 的方法,方法如下:

public MyBean getGlobalInstance() {
     //return my global instance of MyBean
}

这样,在任何我想使用 MyBean 的地方,我都可以通过 getGlobalInstance() 方法获取实例。

我怎样才能实现这个运行 Spring 3.X?

【问题讨论】:

    标签: java spring maven spring-mvc dependency-injection


    【解决方案1】:

    假设你的方法getGlobalInstance在类中,这也是一个spring bean,你可以这样做:

    class MyBeanHolder {
    @Autowired
    ApplicationContext applicationContext;
    
      public MyBean getGlobalInstance() {
        return applicationContext.getBean(MyBean.class);
      }
    }
    

    否则你可以实现接口ApplicationContextAware来获取应用程序上下文,在那里你可以找到你的bean getBean

    【讨论】:

    • 所以基本上,实现 ApplicationContextAware 的途径是唯一的出路,因为如果我把这个类变成一个 bean,那么我仍然会遇到现在我无法在 THIS 中连接的问题新类,因为我尝试使用它的地方仍然是我无法更改的遗留代码的非 bean 类?对吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多