当前位置: 首页 > 知识库问答 >
问题:

Spring上下文中原型bean中的单例bean

曹疏珂
2023-03-14

通常在Spring上下文中,如果原型bean被注入到单例bean中,父类的属性将重写原型bean作用域。但是,如果在原型bean作用域中注入一个单例作用域bean会发生什么。仍然使用内部bean的get bean会返回内部bean的新实例吗?

共有1个答案

梅欣然
2023-03-14

否,prototypebean的所有实例将共享singletonbean的同一实例。
示例:

@Service
public class SingletonBean {
    private int id;
    private static int static_id = 0;

    public SingletonBean() {
        id = static_id++;
    }

    @Override
    public String toString() {
        return "SingletonBean [id=" + id + "]";
    }

}
@Service
@Scope("prototype")
public class PrototypeBean {

    @Autowired
    private SingletonBean singletonBean;
    private int id;

    private static int static_id = 0;

    public PrototypeBean() {
        id = static_id++;
    }

    @Override
    public String toString() {
        return "id=" + id + ", PrototypeBean [singletonBean=" + singletonBean + "]";
    }
}
@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(DemoApplication.class, args);
        PrototypeBean beanA = context.getBean(PrototypeBean.class);
        PrototypeBean beanB = context.getBean(PrototypeBean.class);

        System.out.println(beanA); //id=0, PrototypeBean [singletonBean=SingletonBean [id=0]]
        System.out.println(beanB); //id=1, PrototypeBean [singletonBean=SingletonBean [id=0]]
    }
}

</code>
 类似资料:
  • Spring具有bean类型/作用域,如 -singleton bean(每个应用程序上下文只有一个bean), -prototype bean(每个请求一个新bean) 现在,如果在单例bean中有对原型bean的引用,是否有办法在对单例bean的每个请求中获得一个新的原型bean(在单例bean中)。< br >如果是,配置会是什么样的?

  • 问题内容: 我试图将一个bean 注入一个bean中,以便对单例bean方法的每个新调用都具有原型bean的新实例。 考虑如下的单例豆: 我希望每次调用该方法时,都会使用一个新实例。 下面是原型bean: 似乎正在发生的事情是,Spring急于在该方法中交付PrototypeBean的新实例。也就是说,该方法中的两行代码将在每一行中创建一个prototypeBean的新实例。 因此,在第二行中,输

  • 我目前有一个简单的bean作为pojo,我正在将其注入到工作线程中,工作线程是用定义的。 我发现bean被正确地注入到原型中,被重新初始化,并且所有的值都返回。 下面是注入的代码: POJO: } 我知道bean正在重新创建,因为调试器中的ID发生了变化,并且被打印到控制台。 用这种方式将单例注入到原型中有什么问题吗? 多谢了。

  • 假设有两个类ClassA和ClassB。假设ClassB依赖于ClassA。在配置文件中,如果我们将ClassA的作用域定义为singleton,而将ClassB的作用域定义为Prototype,那么每次创建ClassA的bean实例时ClassB的实例会发生什么?每次返回ClassA实例时,会返回相同的ClassB实例还是创建新实例? 谢谢!!!

  • 我刚接触Spring,正在尝试理解“将一个原型bean注入一个单例bean”的概念。根据我在singleton中的理解,每个Spring IoC容器只有一个实例,不管您检索它多少次。,因为仍未实例化。我开发了以下示例,其中在单个bean中给出了原型bean的参考,如下所示: RequestProcessor.java requestValidator.java 如何解决?我的理解正确吗? 另一种方

  • 我有一个用于原型bean的FactoryBean,如下所示: 我希望在控制器中自动连接它,并且每当我尝试访问属性时(通过,从获得一个新的原型实例: 但是,这从来不会调用getObject()。如果我注入ApplicationContext一个直接访问bean,它就会工作,提供一个全新的属性bean: 如何直接使用@autowired注入来实现?