`
betakoli
  • 浏览: 167142 次
社区版块
存档分类
最新评论

spring单例类中注入非单例类

 
阅读更多

spring默认情况下管理的类是singleton模式,如果在类A中注入了B类,但是B类属于non-singleton,每次使用A的时候都需要初始化B类。

spring提供了ApplicationContextAware,让A意识到spring容器的存在,并且在调用B类的时候通过容器去询问B类是否是单例模式,需要重新初始化? 

// a class that uses a stateful Command-style class to perform some processing
package fiona.apple;

// Spring-API imports
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

public class CommandManager implements ApplicationContextAware {

    private ApplicationContext applicationContext;

    public Object process(Map commandState) {
        // grab a new instance of the appropriate Command
        Command command = createCommand();
        // set the state on the (hopefully brand new) Command instance
        command.setState(commandState);
        return command.execute();
    }

    protected Command createCommand() {
        // notice the Spring API dependency!
        return this.applicationContext.getBean("command", Command.class);
    }

    public void setApplicationContext(
            ApplicationContext applicationContext) throws BeansException {
        this.applicationContext = applicationContext;
    }
}

 主要在这里 return this.applicationContext.getBean("command", Command.class);去检测B是否需要重新初始化

 

分享到:
评论

相关推荐

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

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

    25个经典的Spring面试问答

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

    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.doc

    拓展spring为类中的属性赋值: 40 小结: 47 面向接口编程: 47 4 面向切面编程 52 4.1 代理模式 52 代理模式拓展: 52 4.1.1 JDK动态代理 58 JDK动态代理拓展: 59 4.1.2 CGLIB做代理 66 CGLIB动态代理拓展: 68 ...

    吴天雄--Spring笔记.doc

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

    Guice与Spring框架的区别.pdf

    在这个方法中,我们使用了binder.bind方法将MyService接口绑定到MyServiceImpl实现类,并指定了Scopes.SINGLETON作用域,以确保MyServiceImpl对象是单例的。 Guice的其它使用特性 Guice还提供了一些其它的使用特性...

    Spring.net实战开发

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

    Spring.html

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

    Spring 3 Reference中文

    4.6.1.6 在非Web 应用中,优雅地关闭Spring IoC 容器 74 4.6.2 ApplicationContextAware 和BeanNameAware . 75 4.6.3 其它Aware 接口 75 4.7 Bean 定义的继承. 77 4.8 容器扩展点. 78 4.8.1...

    Java EE设计模式:Spring企业级开发最佳实践

    1.Singleton Pattern:单例模式,确保某个类只有一个实例,并提供一个全局访问点。 在 Spring 中,singleton scope 是默认的 scopes,表示 Bean 只会被实例化一次,并且可以被所有的应用程序上下文访问。 2....

    spring1.2学习心得分享

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

    Spring面试题详细讲解

    spring 中的单例模式完成了后半句话,即提供了全局的访问点 BeanFactory。但没有从构造器级别去控制单例,这是因为 spring 管理的是是任意的 java 对象。 适配器模式(Adapter)在 Spring 的 Aop 中,使用的通知来...

    spring、Struts2、hibernate常见面试题

    本文将详细解释 Spring、Struts2、Hibernate 面试题中的知识点,涵盖了 MVC 模式、Struts1.2 和 Struts2.0 的区别、单例模式、Servlet 依赖、可测试性、项目中使用 SSH 的原因、Struts 和 Spring 的继承关系、实现...

    Spring基础与快速入门

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

    spring mvc注解jdbctemplate

    spring mvc注解方式整合jdbctemplate

    spring学习心得

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

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

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

Global site tag (gtag.js) - Google Analytics