是否可以在不使用ApplicationContextAware的情况下检索具有原型范围的Springbean

是否可以在不使用ApplicationContextAware的情况下检索具有原型范围的Springbean,spring,dependency-injection,Spring,Dependency Injection,使用Spring3.1。如果我想检索一个具有原型作用域的bean(即,每次我都需要一个不同的类实例),那么是否可以在不使用ApplicationContextaware类的情况下检索bean 我现在就是这样做的 @Component @Qualifier("MyService") public class MyServiceImpl implements MyService { @Override public void doSomething() { Blah

使用Spring3.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


有没有可能在不使用ApplicationContextAware类的情况下使用注释或简单的Spring配置来实现这一点?

Spring有一些相当复杂的方法来实现您所追求的目标

请参阅spring文档:


在google上搜索spring proxy scope也会得到一些结果…

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

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


如果您真的需要,有一个叫做的东西可能会对您有所帮助,但它比简单地调用applicationContext.getBean()要复杂得多。

是的,我想这就是我要找的。这个问题展示了如何使用注释:感谢您的回复。我试图避免编写任何特定于Spring的Java,无论是实现ApplicationContextAware还是使用BeanFactory。