`
xm_king
  • 浏览: 395322 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
博客专栏
Group-logo
Spring技术内幕读书笔...
浏览量:15656
社区版块
存档分类
最新评论

Spring Bean的概念

阅读更多

Spring Bean

Bean Spring 装配的组件模型,一切实体类都可以配置成一个 Bean ,进而就可以在任何其他的 Bean 中使用,一个 Bean 也可以不是指定的实体类,这就是抽象 Bean

Spring 中有两个最基本、最重要的包,即 org.springframework.beans org.springframework.context ,在这两个包中,为了实现无侵入式的框架,代码中大量地使用了 Java 中的反射机制,通过动态调用来避免硬编码,为 Spring 反向控制提供了基础保证,在这两个包中,最重要的类时 BeanFactory ApplicationContext BeanFactory 提供一种先进的配置机制来管理任何种类的 Bean ApplicationContext 是建立在 BeanFactory 之上的,并增加了其他功能,例如,国际化的支持、资源的访问和事件传播等。

Bean 的标识 (id name)

Id 属性具有唯一性,每一个 Bean 只能有一个对应的 id,name 属性可以指定一个或者多个名称,各个名称之间用逗号或者分号隔开,第一个默认为标识名称,后面的多个自动成为这个 Bean 的别名。

Bean class属性

Spring 配置文件中 class 属性指明 Bean 的来源,也就是 Bean 的实际路径,它指向一个实体类。

Bean 的作用域

Spring 中可以直接在配置文件中指定类的作用域, scope 标识 Bean 的作用域。

Spring2.0 之前 Bean 只有两种作用域,即 Singleton( 单例 ) non-Singleton( 也称 prototype) Spring2.0 以后,增加了 session request global session 三个专用于 Web 应用程序上下文的 Bean

singleton 作用域

         当一个 Bean 的作用域设置为 Singleton ,那么 Spring IOC 容器中只存在一个共享的 Bean 实例,并且所有对 Bean 的请求,只要 id 与该 bean 定义相匹配,则只会返回 bean 的同一个实例。这个单一实例会被存储到单例缓存 (singleton cache) 中,并且所有针对该 bean 的后续请求和引用都将返回被缓存的对象实例。

       prototype

prototype 的作用域部署的 Bean ,每一个请求都会产生一个新的 Bean 实例,相当于一个 new 的操作,对于 prototype 作用域的 bean ,有一点非常重要,那就是 Spring 不能对一个 prototype 的整个生命周期复杂,容器在初始化、配置、装饰或者是装配完一个 prototype 实例后,将它交给客户端,随后就对该 prototype 实例不负责了。

request

request 表示针对每一个 HTTP 请求都会产生一个新的 Bean ,同时该 Bean 仅在当前 HTTP Request 内有效。

session

session 作用域表示针对在一个 Http 请求都会产生一个新的 Bean ,同时该 Bean 仅在当前 Http session 范围内有效。

global session

       global session 作用域类似于标准的 HTTP Session 作用域。

Bean 的生命周期

一个 Bean 从建立到销毁,会历经几个执行阶段,如果使用 BeanFactory 来生成、管理 Bean ,会尽量支持一下的生命周期。

Bean 的建立

BeanFactory 读取 Bean 的定义文件,并生成各个 Bean 的实例。

属性注入

执行相关的 Bean 属性依赖注入

BeanNameAware setBeanName()

         如果 Bean 类有实现 org.springframework.beans.factory.BeanNameAware 接口,则执行它的 setBeanName() 方法。

      BeanFactoryAware setBeanFactory()

如果 Bean 类实现 org.springframework.beans.factory.BeanFactoryAware 接口,则执行它的 setBeanFactory() 方法。

BeanPostProcessors processBeforeInitialization()

如果有任何的 org.springframework.beans.factory.config.BeanPostProcessor 实例与 Bean 实例相关联,则执行 BeanPostProcessor 实例的 processBeforeInitialization()

InitializingBean afterPropertiesSet()

如果 Bean 类有实现 org.springframework.beans.factory.InitializingBean ,则执行它的 afterPropertiesSet() 方法。

Bean 定义文件中定义 init-method

       可以在 Bean 定义文件使用 ”init-method” 属性设置方法名称。

       BeanPostProcessors processAfterInitialization()

如果有任何的 org.springframework.beans.factory.config.BeanPostProcessor 实例与 Bean 实例相关联,则执行 BeanPostProcessor 实例的 processAfterInitialization()

DisposableBean destroy()

在容器关闭时,如果 Bean 类有实现 org.springframework.beans.factory.DisposableBean 接口,则执行它的 destroy() 方法。

Bean 定义文件中定义 destroy –method

在容器关闭时,可以在 Bean 定义文件使用 destroy –method 属性设置方法名称。

    FactoryBean

Spring 中有两种类型的 Bean ,一种是普通的 Bean ,普通的 Bean 可以是用户定义的任何类;另一种是工厂 Bean ,即 FactoryBean 。工厂 Bean 与普通的 Bean 不同,其返回的对象不是指定类的一个实例,其返回的是该工厂 Bean getObject 方法返回的对象。在 Spring 框架内部, AOP 相关的功能及事务处理中,很多方法使用到工厂 Bean

BeanPostProcessor

         Bean 的依赖关系由 Spring 容器建立并设置以后,你还有机会定义一些 Bean 的修正动作来修正相关的属性,方法是让 Bean 类实现 org.springframework.beans.factory.config.BeanPostProcessor 接口,该接口与 Spring 中的定义如下:

 

public interface BeanPostProcessor {
    Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException;
    Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException;
}

 

    postProcessBeforeInitialization 方法会在 Bean 类被初始化之前 ( 例如 InitializingBean afterPropertiesSet() 方法或者自定义的 init 方法 ) 被执行,而 postProcessAfterInitialization() 方法会在 Bean 类被初始化之后立即被执行。

分享到:
评论

相关推荐

    spring bean的生命周期

    - **XML配置**:在传统的Spring应用中,Bean的定义通常写在XML配置文件中,如`springbean-xml`中的配置。 - **注解配置**:使用`@Component`,`@Service`,`@Repository`和`@Controller`注解标记类,配合`@...

    spring bean XML配置入门

    2. **Bean的概念**: 在Spring中,一个Bean通常代表应用中的一个对象,这些对象由Spring容器创建、管理并提供给其他组件使用。Spring容器通过XML配置文件或注解来定义Bean及其相互关系。 3. **XML配置文件**: ...

    普元eos-springbean开发

    SpringBean是Spring框架的核心概念之一,它是Spring IoC容器管理的对象。在普元EOS平台中,SpringBean同样扮演着重要角色,用于封装业务逻辑、数据访问等功能。通过合理地设计和配置SpringBean,可以极大地提高开发...

    实例化Spring bean的两种工厂方法

    首先,我们要理解Spring Bean的概念。Spring Bean是Spring IoC容器管理的对象,这些对象的生命周期、依赖关系以及初始化行为由Spring容器控制。实例化Spring Bean的方式多种多样,包括XML配置、注解配置以及Java配置...

    spring bean life cycle

    在Spring框架中,Bean生命周期是核心概念之一,它涉及到Bean的创建、初始化、使用和销毁等阶段。了解和掌握Bean生命周期对于开发高质量的Spring应用至关重要。以下是对Spring Bean生命周期的详细解析。 首先,Bean...

    spring bean 属性总结

    在Spring中,核心概念之一就是Bean,它是一个简单的Java对象,由Spring IoC容器管理。Spring通过XML配置文件或注解来定义、配置和管理Beans。下面将深入探讨`<beans>`、`<bean>`及其属性,以及其他相关的配置元素。 ...

    spring bean的生命周期测试代码

    本资源提供了在Spring 4.2环境下关于Bean生命周期的测试代码,帮助我们深入理解这一关键概念。 首先,让我们了解Spring Bean的生命周期主要包含以下几个阶段: 1. **实例化**:Spring容器通过`Class`对象或`...

    Spring Bean简单应用实例

    在Spring框架中,Bean是核心概念,它代表了应用程序中的对象。Spring通过IoC(Inversion of Control,控制反转)和DI(Dependency Injection,依赖注入)来管理这些Bean。在这个"Spring Bean简单应用实例"中,我们将...

    Spring的Bean配置

    在本文中,我们将深入探讨Spring中的Bean配置,包括IoC和DI的概念,Bean的配置方式,以及不同类型的IOC容器。 **Spring的Bean配置**: 在Spring中,Bean是应用中的对象,它们由Spring IoC容器负责创建、管理和装配...

    Spring实例化Bean顺序

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

    Spring Bean的初始化和销毁实例详解

    Spring Bean的初始化和销毁是Spring框架中一个非常重要的概念,它们都是Bean生命周期中不可或缺的一部分。在Spring框架中,我们可以使用多种方式来控制Bean的初始化和销毁,以下就Spring Bean的初始化和销毁进行详细...

    Spring Bean 的生命周期

    Spring Bean的生命周期是Spring框架核心概念之一,它涵盖了Bean从创建到销毁的全过程。了解这一过程对于优化应用程序性能和管理对象状态至关重要。本篇将详细阐述Spring Bean生命周期的各个阶段,以及如何记忆和深入...

    spring的bean加载顺序样例项目

    在Spring框架中,Bean的加载顺序是一个重要的概念,它涉及到Spring容器如何管理和初始化Bean的过程。在"spring的bean加载顺序样例项目"中,我们可以通过分析和实验来深入理解这一主题。下面将详细阐述Spring Bean的...

    Spring之核心容器bean

    在本篇文章中,我们将深入探讨Spring的核心容器及其bean的概念,以帮助你更好地理解和使用这个强大的工具。 **Spring核心容器** Spring的核心容器是整个框架的基础,它负责创建、配置和管理bean。主要有两个关键...

    spring中的bean

    在Spring1-1这个文件中,可能包含了关于这些概念的示例代码和详细教程,帮助开发者深入理解和掌握Spring中的Bean管理。学习和熟练运用这些知识,将对提升Java EE应用的开发效率和质量大有裨益。

    谈谈我对Spring Bean 生命周期的理解

    Spring Bean 生命周期是 Spring 框架中的一个核心概念,了解 Spring Bean 的生命周期对我们了解整个 Spring 框架会有很大的帮助。本文将详细介绍 Spring Bean 生命周期的概念、生命周期图、生命周期阶段、生命周期...

    Java中Spring获取bean方法小结

    在Java开发中,Spring框架是不可或缺的一部分,它提供了一个强大的依赖注入(DI)和面向切面编程(AOP)的容器。Spring的核心在于其...理解这些获取Bean的方法及其背后的概念,对于高效地使用Spring框架至关重要。

    普通类调用Spring bean对象

    首先,理解Spring的核心概念——依赖注入(Dependency Injection,简称DI)。Spring通过DI管理bean,使得对象之间的依赖关系由Spring负责建立和维护,而非对象自身。这增强了代码的可测试性和可维护性。在非Spring...

    Spring Bean Lifecycle Control

    本文将深入探讨Spring Bean的生命周期,并通过实际示例来演示如何运用这些概念。 首先,Spring Bean的生命周期可以分为几个阶段: 1. **初始化阶段**:在这个阶段,Spring会创建Bean的实例,这可以通过`@...

Global site tag (gtag.js) - Google Analytics