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

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 类被初始化之后立即被执行。

分享到:
评论

相关推荐

    javaSpring-经典概念题-试题-中文

    从基础概念如Spring IoC容器和Spring Bean的定义,到高级主题如依赖注入和AOP的实现,以及Web开发方面的Spring MVC框架和表单数据处理等内容都有涉及。此外,还包括了Spring事务管理和Spring Boot框架的介绍,帮助...

    java面试Spring.pdf

    2. Spring俩大核心概念 IOC,Inversion of Control,控制反转 AOP(Aspect-OrientedProgramming),面向切面编程 Spring AOP里面常用名词的概念: Spring容器的启动流程 Spring Bean的生命周期? Spring中bean的作用域...

    Spring开发指南

    Spring Bean封装机制 Bean Wrapper Bean Factory ApplicationContext Web Context Spring 高级特性 Web 应用与 MVC Spring MVC Spring MVC指南 基于模板的Web表示层技术 Web 应用中模板技术与 JSP 技术的...

    spring简介-spring概念与体系结构

    Spring核心概念 IOC(Inversion of Control)控制反转 使用对象时,由主动new产生对象转换为由外部提供对象,此过程中对象创建控制权由程序转移到外部,此思想称为控制反转。 也就是说,我们把需要新建的对象...

    spring-versioned:一个用于版本 spring bean 和方法的 poc

    这是使用 Spring AOP 在方法级别显示版本控制功能的简单概念证明。如何? 在任何 spring bean 中,您都可以在方法级别添加 @Versioned(feature, version) 注释。 并在任何 spring 属性中提供功能版本。 运行时将仅...

    spring2.5学习PPT 传智博客

    03_编码剖析Spring管理Bean的原理 04_Spring的三种实例化Bean的方式 05_配置Spring管理的bean的作用域 06_Spring管理的Bean的生命周期 07_编码剖析Spring依赖注入的原理 08_编码剖析Spring装配基本属性的原理 ...

    77道Spring面试题以及参考答案(2024年最新版)

    这篇文章总结了77道Spring面试题及答案,涵盖...6. AOP部分对面向切面的核心概念如通知、连接点、切点等进行了解释,并介绍了Spring AOP的实现原理。 总的来说,这篇文章内容丰富全面,适合作为Spring面试的重要参考资料,

    Spring攻略PDF版

     2.5 使用Spring IDE的Bean-supporting特性   2.5.1 问题描述   2.5.2 解决方案   2.5.3 实现方法   2.6 小结   第3章 Spring中的Bean配置   3.1 在Spring IoC容器里配置Bean   3.1.1...

    深入解析Spring IoC:源码与实践指南

    本文深入探讨了Spring IoC容器的加载过程及其源码实现,揭示了Spring中最为根本的概念之一。这包括从AnnotationConfigApplicationContext的实例化开始,到DefaultListableBeanFactory工厂的建立,再到...

    Spring攻略中文版PDF

     2.5 使用Spring IDE的Bean-supporting特性   2.5.1 问题描述   2.5.2 解决方案   2.5.3 实现方法   2.6 小结   第3章 Spring中的Bean配置   3.1 在Spring IoC容器里配置Bean   3.1.1...

    Spring攻略英文版(附带源码)

     2.5 使用Spring IDE的Bean-supporting特性   2.5.1 问题描述   2.5.2 解决方案   2.5.3 实现方法   2.6 小结   第3章 Spring中的Bean配置   3.1 在Spring IoC容器里配置Bean   3.1.1 问题...

    spring 容器.docx

    Spring有两个核心接口:BeanFactory和ApplicationContext,其中ApplicationContext是BeanFactory的子接口。...在Spring中,Bean的是一个非常广义的概念,任何的Java对象、Java组件都被当成Bean处理。

    吴天雄--Spring笔记.doc

    第一天内容:Spring框架简介(EJB、JMX、Spring核心功能、Spring模块详解、Spring重要概念(容器)、Spring容器初始化的整个流程、Spring后处理器),IOC详解,Spring环境搭建,Spring创建Bean的三种方式,scope属性...

    Spring相关的外文文献和翻译.zip

    这里主要介绍Spring的基本概念,并详细介绍其中以“bean工厂”为核心的轻量级控制反转(IoC)容器。 Spring让开发者更轻松的实现轻量级、可扩展的J2EE架构。对于我们推荐的架构模块,让Spring提供了即时可用的实现...

    Spring Boot最常用的30个注解.docx

    详细介绍了Spring Boot最常用的30个注解,包含概念、原理、示例 Spring Boot最常用的30个注解 一、 @SpringBootApplication 二、 Spring Bean 相关 1 @Controller 2 @Service 3 @Repository 4 @Component 5 @Bean 6 ...

    Spring-Reference_zh_CN(Spring中文参考手册)

    2. Spring 2.0 的新特性 2.1. 简介 2.2. 控制反转(IoC)容器 2.2.1. 更简单的XML配置 2.2.2. 新的bean作用域 2.2.3. 可扩展的XML编写 2.3. 面向切面编程(AOP) 2.3.1. 更加简单的AOP XML配置 2.3.2. 对@AspectJ 切面的...

    spring.doc

    SpringAOP概念拓展: 73 之前实现了目标方法的动态调用,现在来实现切面的动态调用。 74 4.2.2 AOP实现的两种模式 78 4.2.2.1 xml形式 78 XML形式拓展: 81 异常通知处理例子: 91 不用spring异常通知,另一种处理...

Global site tag (gtag.js) - Google Analytics