java - 将原型(prototype) bean Autowiring 到原型(prototype) bean 中?

标签 java spring

我正在使用一些现有代码,它正在做我以前从未见过的事情。我已经使用方法注入(inject)将原型(prototype) bean Autowiring 到单例中,或者使用 getBean() 从上下文中获取 bean。我在这段代码中看到的是一个 bean,它是一个原型(prototype)并使用 getBean() 检索,并且它具有 Autowiring 的依赖项。其中大多数都是单例 bean,这是有道理的。但是有另一个原型(prototype) bean 的 Autowiring ,从我所看到的来看,它似乎确实得到了一个新的 bean。我的问题是,当您将原型(prototype) Autowiring 到原型(prototype)中时,这会给您一个新实例吗?由于 Autowiring 请求不是在启动时而是在创建此 bean 时发出,因此它是否会创建一个新实例?这违背了我对 Autowiring 和原型(prototype) bean 的想法,我想听到来自野外的答案。感谢您的任何见解。我试图尽量减少对这段代码的重构,因为它有点像意大利面条。

示例:

@Scope("prototype")
public class MyPrototypeClass  {

    @Autowired
    private ReallyGoodSingletonService svc;

    @Autowired
    private APrototypeBean bean;

    public void doSomething() {
        bean.doAThing();
    }
}

@Scope("prototype)
public class APrototypeBean {
   private int stuffgoeshere;

   public void doAThing() {
   }
}

那么,当调用 MyPrototypeClass 中的 doSomething() 时,该“bean”是单例还是为 MyPrototypeClass 的每个实例创建一个新的?

最佳答案

在您的示例中,APrototypeBean bean 将被设置为一个全新的 bean,它将一直存在,直到您创建的 MyPrototypeClass 实例被销毁为止。

如果您创建 MyPrototypeClass 的第二个实例,那么该第二个实例将接收其自己的 APrototypeBean。使用当前配置,每次调用 doSomething() 时,都会在该 MyPrototypeClass 唯一的 APrototypeBean 实例上调用该方法对象。

关于java - 将原型(prototype) bean Autowiring 到原型(prototype) bean 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26131603/

相关文章:

java - 细化代码。搜索字符串

java - 登录后显示用户的个人公共(public)页面而不是网站的公共(public)页面

java - 与 Java 中的类同名的对象

java - Spring mvc @PathVariable 给出 'The request sent by the client was syntactically incorrect.'

spring - 在 freemarker 模板中获取区域设置

java - jsp中如何解析数组列表数据和json数据

java - 创建名称为 'dynamoDB-DynamoDBMapper' 的 bean 时出错

java - 为什么我无法将 JPanel 添加到 JFrame?

java - 在Java中显示图像

mysql - 交易测试不会在完成后回滚