5

使用 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 类?

4

2 回答 2

1

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

请参阅弹簧文档:http ://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/beans.html#beans-factory-scopes-other-injection

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

于 2013-01-04T11:37:18.360 回答
0

你真的不需要ApplicationContextAware。您只需要一个 BeanFactory (ApplicationContextAware 只是一种方便的获取方式)。

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

如果你真的需要它,有一种叫做方法注入的东西可以帮助你,但它比简单地调用 applicationContext.getBean() 更复杂。

于 2013-01-04T11:42:42.653 回答