`
somefuture
  • 浏览: 1089707 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Spring中的多例往单例里注入的方法

 
阅读更多

Spring的prototype向singleton注入会有问题,具体见

Spring Bean的prototype无用的解决

除了这篇文章里介绍的方法(ApplicationContext .getBean和代理模式)以外,在java(Spring)领域还有集中其他的实现方式。

这里我们说一下。

 

1. 使用Spring的ObjectFactory

如果本来的代码是这样的

    @Autowired
    private PrototypeBean bean;

 在单例里直接使用或者即使是在多例里面获取多次,这样拿到的也是同样的一个实例。

我们的状态bean就无效了。

可以改成这样

    @Autowired
    private ObjectFactory<PrototypeBean> bean;

 使用的时候调用getObject方法

bean.getObject()

 即可。

 

2. 使用java的JSR 330提出的Provider<T>

要引入jar包javax.inject

import javax.inject.Provider;

  使用上和前面的ObjectFactory类似,只是方法名称变成了get

 

在我看来Provider和ObjectFactory的区别就是Resource和Autowire的区别。

 

 

3.使用Spring的Lookup注解

import org.springframework.beans.factory.annotation.Lookup;
import org.springframework.stereotype.Component;

@Component
public class MySingletonBean {

    public void showMessage(){
        MyPrototypeBean bean = getPrototypeBean();
      //do your 自己的逻辑
    }

    @Lookup
    public MyPrototypeBean getPrototypeBean(){
        //spring自己会覆盖该方法
        return null;
    }
}

 这样不用注入一个属性,但是要增加一个返回null的方法。

 

 

1
0
分享到:
评论

相关推荐

    浅谈Spring 的Controller 是单例or多例

    本文将深入探讨Spring的Controller是单例还是多例,以及如何确保其在并发环境下的安全性。 首先,根据Spring的默认行为,Controller被设计为单例模式。这意味着在Spring容器中,只会创建一个Controller实例,并且这...

    Spring依赖注入检查.

    本文将深入探讨Spring依赖注入的概念、工作原理以及如何在实际项目中应用。 依赖注入(Dependency Injection,简称DI)是一种设计模式,它允许组件之间通过外部源来管理其依赖关系,而不是由组件自己来创建或查找...

    在非spring注解类中使用spring容器中的bean_普通类中使用yml配置文件中的配置信息

    然而,在某些情况下,我们可能需要在非Spring注解的类中访问Spring容器中的Bean,或者在这些类中使用YAML配置文件中的配置信息。本篇将详细介绍如何在这样的场景下实现这一目标。 首先,让我们来理解如何在非Spring...

    springIoc实现原理

    2. **Bean实例化**:根据BeanDefinition,Spring容器创建Bean实例,可以是单例或多例。 3. **依赖注入**:Spring容器根据BeanDefinition中的依赖关系,为Bean注入依赖对象。 4. **初始化**:Spring容器调用Bean的...

    Spring IOC Annotation 注入 学习实例

    7. `@Scope`:定义Bean的作用范围,如单例(`prototype`)或多例(`singleton`)。 8. `@PostConstruct` 和 `@PreDestroy`:这两个注解分别标识在Bean初始化后和销毁前需要执行的方法。 学习Spring IOC Annotation...

    spring单例引起的线程安全问题

    在多例模式下,我们需要一个额外的类 `C` 来动态地从 Spring 容器中获取新的 `B` 实例,因为直接在 `Run` 类中注入 `B` 仍然只会得到一个实例。`C` 类通过 `ApplicationContext` 获取新的 `B` 实例,确保每个线程都...

    Spring学习笔记,精华摘要

    Spring实现单例模式的方式是通过静态工厂方法`getInstance()`确保任何时候返回的都是同一对象,防止了类的多次实例化。 依赖注入是Spring的核心特性,它允许组件之间的依赖关系在运行时通过容器进行管理,而不是在...

    对Spring中注解怎么实现的一些基本原理

    在Spring框架中,注解是实现依赖注入和配置的核心机制之一。本文将深入探讨Spring注解的基本原理,包括它们如何被解析、处理以及如何影响应用程序的生命周期。 首先,我们需要了解注解在Java语言中的本质。注解是一...

    Spring的自动扫描注入.docx

    在 Spring 框架中,可以使用 @PostConstruct 和 @PreDestroy 注解来指定初始化和销毁方法。例如: @PostConstruct public void init() { } @PreDestroy public void destory() { } Spring 的自动扫描注入机制可以...

    Struts中的Action 单例与多例详解

    Struts框架中的Action设计有两种模式:单例(Singleton)与多例(Multiton/Prototype)。为了理解这两种模式在Struts2中的实现与适用场景,我们需先了解单例模式和多例模式的基本概念及其在Web应用中的行为特点。 ...

    spring static静态方法里面注入bean空指针解决

    在Spring框架中,静态方法内部注入Bean导致空指针异常是一个常见的问题,特别是在处理较旧的项目时。这里我们分析两种解决这个问题的方法。 首先,让我们深入理解问题的原因。在Spring中,`@Autowired`注解用于自动...

    spring 注入原理

    Bean可以被配置为单例(Singleton)或多例(Prototype)模式,Spring会根据不同的生命周期策略进行管理。 #### 六、自定义Spring容器 虽然本文提到的例子是基于XML配置,但Spring也支持注解驱动的方式,通过`@...

    深入理解Spring中的Lookup(方法注入)

    总的来说,Lookup方法注入是Spring提供的一种解决策略,它使得单例bean能够正确处理非单例依赖,避免了在多线程环境中可能出现的问题,同时保持了代码的简洁性。通过理解和熟练运用这种方法,开发者可以更好地利用...

    1-通过Spring实现依赖注入.pdf

    在本文中,我们将深入探讨如何通过Spring框架实现依赖注入,这是Spring的核心特性之一,对于理解和掌握Spring认证至关重要。依赖注入(Dependency Injection,简称DI)是一种设计模式,它允许我们解耦组件,提高代码...

    Spring中常用注解

    10. `@Configuration` 和 `@Bean`: 在Spring 3.0引入的基于注解的配置中,`@Configuration`类可以替代XML配置文件,`@Bean`注解则标记方法为bean的生产者,返回的对象会被添加到Spring容器中。 以上是Spring框架中...

    spring中文参考文档

    Spring框架是Java开发中的核心组件,以其依赖注入(Dependency Injection,简称DI)和面向切面编程(Aspect-Oriented Programming,简称AOP)的理念,极大地简化了企业级应用的复杂性。Spring框架提供了多种功能,...

    Spring in Action 中文版 pdf

    7. **Spring Boot**:Spring Boot简化了Spring应用程序的启动和配置过程,书中可能涉及快速启动Spring应用程序的方法,以及自动配置的概念。 8. **测试**:Spring提供了一套强大的测试工具,包括单元测试、集成测试...

    Spring容器中IOC

    2. prototype(多例):只有在getBean时被实例化。 FactoryBean是另外一种方式来获取对象实例,通过getBean方法可以取得实体类,实际使用一般是在后期,spring去集成mybatis,mybatis中的核心对象SqlSessionFactory...

    spring中的bean

    在Java企业级开发中,Spring框架扮演着至关重要的角色,它是现代Java应用的核心组件之一。Spring框架通过提供依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)等特性,简化...

Global site tag (gtag.js) - Google Analytics