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

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容器中的bean_普通类中使用yml配置文件中的配置信息

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

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

    在 Spring 框架中,单例(Singleton)模式是一种常见的bean管理方式,意味着在整个Spring容器中,只有一个特定类的实例被创建并共享。默认情况下,所有 Spring 的bean 都是单例模式。通过在类上添加 `@Scope(...

    Spring的自动扫描注入.docx

    在 Spring 2.5 中,引入了组件自动扫描机制,该机制可以在类路径下寻找标注了 @Component、@Service、@Controller、@Repository 注解的类,并将这些类纳入 Spring 容器中管理。 @Component、@Repository、@Service...

    Spring依赖注入检查.

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

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

    Spring Boot普通类调用bean【从零开始学Spring Boot】”旨在指导初学者如何在非Spring管理的类中访问和使用Spring容器中的bean。下面将详细讲解这个主题。 首先,了解Spring Boot的基础概念是必要的。Spring Boot...

    Spring IOC Annotation 注入 学习实例

    1. `@Component`:这是一个基础注解,用于标记一个类为Spring中的Bean。通常,我们将其放在控制器、服务或DAO类上,让Spring容器知道哪些类需要被管理。 2. `@Service`:这个注解是`@Component`的特化,主要用于...

    单例模式demo

    在某些场景下,如依赖注入和Spring框架中,推荐使用更灵活的策略模式来替代传统的单例。 总的来说,单例模式是一种重要的设计模式,尤其在资源管理和跨组件通信中发挥着关键作用。理解并熟练掌握单例模式,对于提升...

    普通类调用Spring bean对象

    当我们需要在非Spring管理的普通类中调用Spring管理的bean对象时,需要掌握特定的方法。这篇文档将详细介绍如何实现这一操作,并探讨相关的源码和技术工具。 首先,理解Spring的核心概念——依赖注入(Dependency ...

    spring 中特殊bean用法

    6. **自动装配(Autowired)**: Spring的自动装配功能可以自动将依赖注入到Bean中,无需手动配置。`@Autowired`注解可以应用在字段、方法和构造函数上,Spring会根据类型或名称自动寻找匹配的Bean进行注入。 7. ** ...

    设计模式之单例模式

    单例模式是软件设计模式中的一种经典模式,它在许多实际场景中被广泛使用,尤其在需要...同时,随着编程语言和框架的发展,如Spring框架中的依赖注入,有时可以避免使用单例模式,通过更灵活的方式管理对象的生命周期。

    浅谈Spring 的Controller 是单例or多例

    4. **依赖注入和`@Autowired`**:在Spring中,通常推荐通过依赖注入来获取服务层对象,而不是直接在Controller中创建这些对象。这是因为Spring会管理这些依赖的生命周期,保证在并发环境下的正确使用。如果服务层...

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

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

    spring注解实现注入.zip

    在Spring框架中,注解注入是一种非常常用且强大的依赖注入(Dependency Injection,简称DI)方式。依赖注入是Spring的核心特性之一,它允许开发者在不直接创建对象的情况下,将依赖关系从对象代码中分离出来,提高了...

    常见设计模式-单例模式

    单例模式是设计模式中的一种,其主要目的是确保一个类只有一个实例,并且提供一个全局访问点来获取这个实例。在Java编程中,实现单例模式有多种方式,每种方式都有其优缺点。 1. **饿汉式**: 饿汉式在类加载时即...

    Spring学习笔记,精华摘要

    Spring框架是Java开发中不可或缺的一部分,它以IoC(Inversion of Control,控制反转)和DI(Dependency Injection,依赖注入)为核心,简化了组件的管理并降低了代码间的耦合度。在Spring的学习过程中,理解其核心...

    Jersey+Spring:解决Jersey单实例问题

    Spring 提供了强大的依赖注入和管理 Bean 的能力,可以通过控制服务实例的生命周期来避免单例问题。有两种主要的方法可以在 Spring 中针对每个客户端请求创建新的 Jersey 服务实例: 1. **Request Scope**: 使用 ...

    25个经典的Spring面试问答

    【Spring单例Bean与线程安全】 Spring中的单例Bean默认不是线程安全的。如果多个线程同时访问一个非线程安全的单例Bean,可能会导致数据不一致。因此,应避免在单例Bean中存储状态,或者采取同步措施。 【注入Java ...

    单例模式的七种写法

    这种方式通常应用于依赖注入框架中,如Spring。在容器启动时,根据配置注册单例bean。 ```java @Configuration public class AppConfig { @Bean public Singleton singleton() { return new Singleton(); } } `...

Global site tag (gtag.js) - Google Analytics