`
somefuture
  • 浏览: 1078546 次
  • 性别: 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单例引起的线程安全问题

    一、spring单例与多例定义 单例:一个类只能产生一个对象(对应到spring中,注入的对象永远是同一个) 多例:一个类能产生多个对象(对应到spring中,注入的对象永远是新的) @Scope("prototype") @Scope("singleton...

    25个经典的Spring面试问答

    Spring框架中的单例Beans是线程安全的么 请举例说明如何在Spring中注入一个Java Collection 如何向Spring Bean中注入一个JavautilProperties 请解释Spring Bean的自动装配 请解释自动装配模式的区别 如何开启基于...

    spring.doc

    Scope单例多例作用域拓展: 16 3.4.1 singleton(默认值) 16 3.4.2 prototype 17 3.4.3 Request 17 3.4.4 Session 18 3.4.5 Global session 18 3.4.6 指定Bean的初始化方法和销毁方法 18 Bean的初始化和销毁拓展: 18...

    Spring面试专题.pdf

    13、Spring 框架中的单例 Beans 是线程安全的么? 14、请举例说明如何在 Spring 中注入一个 Java Collection? 15、如何向 Spring Bean 中注入一个 Java.util.Properties? 16、请解释 Spring Bean 的自动装配? 17...

    Spring面试题.zip

    13、Spring 框架中的单例 Beans 是线程安全的么? 14、请举例说明如何在 Spring 中注入一个 Java Collection? 15、如何向 Spring Bean 中注入一个 Java.util.Properties? 16、请解释 Spring Bean 的自动装配? 17...

    Spring面试题含答案.pdf

    26. Spring 框架中的单例 bean 是线程安全的吗? 27. 解释 Spring 框架中 bean 的生命周期 28. 哪些是重要的 bean 生命周期方法? 你能重载它们吗? 29. 什么是 Spring 的内部 bean? 30. 在 Spring 中如何注入一个...

    Spring.html

    ClassPathXmlApplicationContext:使用这个工厂创建对象,他会根据scope智能判断是否懒加载,如果是单例则创建容器时就会创建里面bean的实例,如果是多例在获取使用时才会创建bean实例 ...

    Spring.net实战开发

    作为对IObjectFactory 的扩展,IApplicationContext接口也在Spring.Core库中, Spring DOTNET 是一个关注于.NET企业应用开发的应用程序框架。它能够提供宽广范围的功能,例如依赖注入、面向方面编程(AOP)、数据...

    吴天雄--Spring笔记.doc

    IOC详解,Spring环境搭建,Spring创建Bean的三种方式,scope属性详解(包含单例设计模式),DI详解,Spring的几种注入方式,利用Spring简化Mybatis;第二天内容:AOP(AOP常用概念、Spring的三种aop实现方式、代理...

    spring1.2学习心得分享

    Spring容器的特点 (1)容器对对象的管理 a.创建时机:默认和容器一起创建。 可以使用延缓实例化 可以使用延缓所有组件实例化 b.销毁时机:单例对象容器close()负责销毁 c.创建对象的模式(使用范围):scope...

    Spring 3 Reference中文

    4.4.6.1 查找方法注入.. 58 4.4.6.2 任意方法的替代 59 4.5 Bean 的范围. 60 4.5.1 单例范围. 61 4.5.2 原型范围. 62 4.5.3 单例bean 和原型bean 依赖. 63 4.5.4 请求,会话和全局...

    Spring基础与快速入门

    4 依赖注入:建立对象与对象之间依赖关系的实现,包括接口注入、构造注入、set注入,在Spring中只支持后两种 5 AOP:面向方面编程,我们可以把日志、安全、事务管理等服务(或功能)理解成一个“方面”,那么以前...

    Spring-IOC::label:手写实现了Spring框架的基本功能,存在了注解以及xml配置,并且实现了引用注入等功能,还实现了SpringMVC的简单功能

    xml注入注解注入简单MVC功能注入支持递归注入属性注入引用注入(但未解决循环依赖)注解配置单例以及原型模式切换运用的设计模式工厂设计模式:Spring使用工厂模式通过BeanFactory,ApplicationContext创建bean对象...

    spring mvc注解jdbctemplate

    spring mvc注解方式整合jdbctemplate

    Spring IoC中的基础知识

    IoC称为控制反转又叫DI(依赖注入)。 2.Spring Spring的定义:是一个IoC容器  分为: spring core  spring beans: 组件工厂BeanFactory  spring context: 环境,装配  spring expression 3.Spring 组件的...

    spring1.1开发理解

    Spring容器的特点 (1)容器对对象的管理 a.创建时机:默认和容器一起创建。 可以使用延缓实例化 可以使用延缓所有组件实例化 b.销毁时机:单例对象容器close()负责销毁 c.创建对象的模式(使用范围):scope...

    spring-learn:Spring轻松学习demo

    set方法注入 构造方法注入 2.Bean的装配 1.豆的作用域 单例单例获取 原型每次请求都创建实例 2.豆的生命周期 定义,初始化,使用,销毁 待补充... 3.意识到弹簧-让bean获取spring容器的服务 BeanNameAware可以获取...

    初识Spring

    (1)用无参构造方法创建对象(2)用带参的构造方法创建对象(3)用静态工厂创建对象(4)用非静态工厂创建对象Spring的单例模式和多例模式Spring框架的依赖注入依赖注入简介依赖注入的类型:(1)setter方法注入:...

    spring3.1中文参考文档

    1.1 依赖注入和控制反转 ............................................................................................................................7 1.2 模块..............................................

Global site tag (gtag.js) - Google Analytics