【问题标题】:Is it possible to retrieve a Spring bean with prototype scope without using ApplicationContextAware是否可以在不使用 ApplicationContextAware 的情况下检索具有原型范围的 Spring bean
【发布时间】:2013-01-04 11:27:08
【问题描述】:

使用 Spring 3.1。如果我想检索具有原型范围的 bean(即我每次都想要一个不同的类实例),是否可以在不使用 ApplicationContextaware 类的情况下检索 bean?

我目前是这样的

@Component
@Qualifier("MyService")
public class MyServiceImpl implements MyService {

    @Override
    public void doSomething() {
        Blah blah = (Blah)ApplicationContextProvider.getContext().getBean("blah");
        blah.setThing("thing");
        blah.doSomething();
    }
}


@Component("blah")
@Scope("prototype")
public class Blah {
    ....
}

ApplicationContextProvider 实现 ApplicationContextAware 的地方。

是否可以通过注解或简单的 Spring 配置来做到这一点,而不必使用 ApplicationContextAware 类?

【问题讨论】:

    标签: spring dependency-injection


    【解决方案1】:

    Spring 有一些相当复杂的方法来实现你所追求的......

    查看 spring 文档:http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/beans.html#beans-factory-scopes-other-injection

    在 google 上搜索 spring 代理范围也抛出了一些结果...

    【讨论】:

    【解决方案2】:

    您实际上并不需要 ApplicationContextAware。您只需要一个 BeanFactory(ApplicationContextAware 只是一种方便的获取方式)。

    具有作用域原型的 bean 只是意味着每次调用 ApplicationContext.getBean 时都会创建一个新的 bean 实例。如果您尝试在单例中注入原型 bean,您的原型 bean 将被注入一次(因此不再是原型)。

    有一个叫做method injection 的东西如果你真的需要它可能会帮助你,但它比简单地调用 applicationContext.getBean() 更复杂。

    【讨论】:

    • 感谢您的回复。我试图摆脱编写任何特定于 Spring 的 Java,无论是实现 ApplicationContextAware 还是使用 BeanFactory。
    猜你喜欢
    • 2011-05-06
    • 1970-01-01
    • 2014-06-17
    • 2012-11-27
    • 1970-01-01
    • 1970-01-01
    • 2018-04-01
    • 2012-04-21
    • 2013-06-14
    相关资源
    最近更新 更多