spring是否有一些内置的工厂实现



我有一个类,如下所示。

public class MyClass {

  public void doSomething(){
      //B b = //some how get new instance of B each time when doSomething is called
      //do it now
   }

}

春天提供了这样的东西吗?或者我必须自己创建一个工厂,每次调用工厂的get方法时都会创建并返回B?

这是可能的,并记录在手册中:

在大多数应用程序场景中,容器中的大多数bean都是singleton。当单例bean需要与另一个单例bean协作,或者非单例bean需与另一非单例bean协作时,通常通过将一个bean定义为另一个的属性来处理依赖关系。当bean的生命周期不同时,就会出现问题。假设单例bean A需要使用非单例(原型)bean B,可能是在A上的每个方法调用上。容器只创建一次单例bean A,因此只获得一次设置属性的机会。容器不能在每次需要时都为bean A提供bean B的新实例。

一个解决方案是放弃一些控制权的倒置。您可以通过实现ApplicationContextAware接口,并通过每次bean A需要时对容器进行getBean("B")调用来请求(通常是新的)bean B实例,从而使bean A知道容器。

[…]

查找方法注入是容器重写容器管理的bean上的方法的能力,以返回容器中另一个命名bean的查找结果。查找通常涉及一个原型bean,如前一节所述的场景。Spring Framework通过使用CGLIB库中的字节码生成来动态生成覆盖该方法的子类,从而实现了这种方法注入。

最新更新