`

解决Spring中singleton中注入prototype Bean的问题

 
阅读更多

解决Spring中singleton中注入prototype Bean的问题

        如果在Spring中使用了singleton的Bean如果注入了prototype 的Bean,那么prototype 就会失效,原因是singleton的Bean只有一个引用,也是唯一的引用。

        在一些项目中还不得不这么做,一些存在了状态的Bean(内部有一些属性等)也不得不定义成为prototype ,如果定义成singleton就会出现一些问题、BUG等,但如果注入到了singleton的Bean中,即使定义成为prototype 也无效,解决方法如下:

        在singleton的Bean中,为需要注入的Bean提供抽象方法,如需要一个User对象,代码如下:

        public abstract User getUser();

        之后通过Spring提供的<lookup-method>的标签,将User对象通过getUser()抽象方法注入到singleton的Bean中,这样每次所获取到的User对象就是prototype 了。注意,因为getUser()方法是抽象方法,所以,此方法存在的类也是一个抽象类。

        简言之,就是Spring对抽象类中抽象方法的注入。

        

1
0
分享到:
评论

相关推荐

    singleton Bean 创建 prototype Bean

    在Spring框架中,Bean的两种主要作用域是Singleton和Prototype。Singleton Bean表示在整个Spring IoC容器中只有一个实例,而Prototype Bean则表示每次请求都会创建一个新的实例。这两种作用域的使用场景和实现方式都...

    Spring实战之Bean的作用域singleton和prototype用法分析

    总结起来,Spring中的`singleton`和`prototype`作用域是管理Bean生命周期的重要手段。`singleton`提供了单例模式的实现,确保了全局唯一性,适合状态不随时间改变的对象;`prototype`则支持按需创建新实例,适用于...

    通俗易懂spring之singleton和prototype.docx

    2. **生命周期管理**:对于Singleton Bean,Spring容器会在初始化时创建实例,而对于Prototype Bean,实例化是在实际请求时进行的,这给了开发者更多的灵活性,可以根据需要控制对象的创建。 理解这两种作用域对于...

    spring bean的生命周期

    - **属性注入**:Spring会将依赖注入到Bean中,包括值注入(value,ref)和集合注入(list,map,props,set)。 - **初始化回调**:Spring支持两种类型的初始化回调方法,即`@PostConstruct`注解的方法和在XML中...

    Spring中的singleton和prototype的实现

    本文将详细介绍Spring中的singleton和prototype的实现,通过示例代码和测试结果,帮助读者深入理解这两种bean作用域。 Singleton Singleton模式是Spring框架中最基本的bean作用域,其特点是容器中只实例化一次。...

    详解Spring中bean的作用域

    在 Spring 中,bean 的作用域可以分为五种:singleton、prototype、request、session 和 global session。这五种作用域类型决定了 bean 的实例化和生命周期的管理方式。 1. Singleton 作用域 Singleton 作用域是...

    spring中的bean

    6. **作用域**:Spring Bean有多种作用域,如单例(Singleton)、原型(Prototype)、会话(Session)和请求(Request)。单例Bean在整个应用中只有一个实例,而原型Bean每次请求都会创建新的实例。 7. **AOP**:...

    Spring Bean重复执行两次(实例被构造两次)问题分析

    在Spring框架中,Bean的生命周期管理是其核心特性之一,然而有时我们可能会遇到Spring Bean重复执行两次的问题,即实例被构造两次。这个问题可能是由多种原因引起的,涉及到Spring的初始化过程和容器的行为。以下是...

    Spring实例化Bean顺序

    在Spring框架中,Bean的实例化顺序是一个关键概念,它涉及到如何管理和协调多个Bean的创建与依赖关系。这里,我们主要探讨的是Spring如何通过其IoC(Inversion of Control)容器来实例化Bean,并理解其背后的逻辑。 ...

    Spring Bean 加载顺序 .

    在Spring框架中,Bean的加载顺序是理解Spring IoC(Inversion of Control,控制反转)容器工作原理的关键部分。这个过程涉及到Bean定义的解析、实例化、初始化等多个步骤。让我们详细探讨Spring Bean加载顺序的各个...

    简单了解spring bean作用域属性singleton和prototype的区别

    Spring Bean作用域属性singleton和prototype的区别详解 Spring Framework中,Bean的作用域属性是指Bean实例的生命周期和作用域。Spring提供了五种作用域:singleton、prototype、request、session和global session...

    Spring中与Bean相关的接口

    默认情况下,Bean是单例(Singleton),但在`@Scope`注解的帮助下,我们可以创建原型(Prototype)、会话(Session)或请求(Request)作用域的Bean。 最后,`AutowireCandidateResolver`和`BeanFactoryAware`接口...

    详解Spring中Bean的生命周期和作用域及实现方式

    Spring中Bean的生命周期和作用域及实现方式 Spring是一个非常流行的Java应用程序框架,它提供了一个灵活的机制来管理Bean的生命周期和作用域。Bean的生命周期和作用域是Spring框架中两个非常重要的概念,它们决定了...

    Spring bean 管理

    - singleton:默认的作用域,表示容器中只有一个Bean实例。 - prototype:每次请求都创建一个新的Bean实例。 - request:每个HTTP请求都会创建一个新的Bean实例,只适用于Web应用。 - session:在一个...

    Spring 框架中注入或替换方法实现

    本文将详细介绍 Spring 框架中注入或替换方法实现,主要涵盖了 Spring 框架中 singleton 和 prototype Bean 的作用域、BeanFactoryAware 接口的使用、CGLib 库的应用等方面的知识点。 一、Spring 框架中 singleton ...

    Spring框架中Bean的生命周期 Spring中Bean有几种作用域

    在Spring框架中,Bean的生命周期管理和作用域是其核心特性之一,它们对于理解Spring如何管理对象的创建、初始化、使用以及销毁至关重要。首先,我们来深入探讨Bean的生命周期。 Spring中的Bean生命周期主要分为两个...

    Spring之核心容器bean

    Spring bean可以有多种作用域,包括单例(Singleton)、原型(Prototype)、请求(Request)、会话(Session)等。单例bean在整个应用中只有一个实例,而原型bean每次请求都会创建新的实例。其他作用域主要适用于Web...

    Java中Spring获取bean方法小结

    - **通过代码注解**:Spring也支持通过注解来获取Bean,如`@Autowired`和`@Resource`,它们能够自动将依赖注入到目标字段或方法中,无需手动从ApplicationContext获取。 3. **静态Singleton Bean Manager** 通常...

    Spring框架系列(8) - Spring IOC实现原理详解之Bean实例化(生命周期,循环依赖等).doc

    singleton Beans 是指在 Spring 框架中每个Bean 只会被实例化一次,解决了循环依赖问题。但是,Spring 框架中不能解决非单例属性之外的循环依赖、构造器的循环依赖和prototype 作用域循环依赖。 在 Spring 框架中,...

    17. Spring Boot普通类调用bean【从零开始学Spring Boot】

    这样,Spring会自动将配置文件中的值注入到bean中。 7. **Spring Boot测试**: 在测试场景下,可以使用`@SpringBootTest`注解启动整个Spring Boot应用,然后使用`@Autowired`注入需要的bean进行测试。 8. **Bean...

Global site tag (gtag.js) - Google Analytics