Spring学习笔记3_Bean 获取与实例化

本章目录

Spring学习笔记3_Bean 获取与实例化

1.ApplicationContext与BeanFactory关系 2.Bean的实例化方式 2.1无参数构造 2.2静态工厂方法 2.3实例工厂方法 3.Bean的作用域 4.Bean的生命周期 提示:点击文章底部的“阅读原文”查看以前所有的笔记

1 ApplicationContext 与 BeanFactory 关系

ApplicationContext 它是扩展 BeanFactory 接口。 BeanFactory 它采取延迟加载的方案,只有真正在 getBean 时才会实例化 Bean

在开发中我们一般使用的是 ApplicationContext,真正使用的是其实现类, FileSystemXmlAppliCationContext 根据文件路径获取 ClassPathXmlApplicationContext 根据类路径获取 AppliCationContext它会在配置文件加载时,就会初始化Bean,并且ApplicationContext 它 提 供 不 同 的 应 用 层 的 Context 实现。例如在 web 开 发 中 可 以 使 用 WebApplicationContext.

2. Bean 的实例化方式

2.1. 无参数构造

对于这种方式,注意 Bean 类中必须提供无参数构造。

2.2. 静态工厂方法

需要创建一个工厂类,在工厂类中提供一个 static 返回 bean 对象的方法就可以。

2.3. 实例工厂方法

需要创建一个工厂类,在工厂类中提供一个非 static 的创建 bean 对象的方法,在配置文件

中需要将工厂配置,还需要配置 bean

3. Bean 的作用域

在 bean 声明时它有一个 scope 属性,它是用于描述 bean 的作用域。 可取值有: singleton:单例 代表在 spring ioc 容器中只有一个 Bean 实例 (默认的 scope) prototype:多例 每一次从 spring 容器中获取时,都会返回一个新的实例 request:用在 web 开发中,将 bean 对象 request.setAttribute()存储到 request 域中 session: 用在 web 开发中,将 bean 对象 session.setAttribute()存储到 session 域中

在开如常用的值是 singleton 与 prototype

4. Bean 的生命周期

1. instantiate bean 对象实例化

2. populate properties 封装属性 3. 如果 Bean 实现 BeanNameAware 执行 setBeanName 4. 如果 Bean 实现 BeanFactoryAwar 或 ApplicationContextAwar 设置工厂 setBeanFactory 或上 下文对象 setApplicationContext 5. 如果存在类实现 BeanPostProcess(后处理 Bean),执行 postProcessBeforeInitialization 6. 如果 Bean 实现 InitializingBean 执行 afterPropertiesSet 7. 调用自定义的 init-method 方法 8. 如果存在类实现 BeanPostProcessor(处理 Bean),执行 postProcessAfterInitialization 9. 执行业务处理 10. 如果 Bean 实现 DisposableBean 执行 destroy 11. 调用自定义的 destroy-method

对于 bean 的生命周期方法: 第三步与第四步是让 Bean 了解 spring 容器。

第五步与第八步 可以针对指定的 Bean 进行功能增强,这时一般会使用动态代理.

第六步与第十步:通过实现指定的接口来完成 init 与 destroy 操作 但是在开发中一般不使用第 6 步与第 10 步,原因是我们可以使用第 7 步与第 11 步来完成。

第 7 步与第 11 步的初始化与销毁操作它无耦合,推荐使用的。但是必须在配置文件中指定 初始化与销毁的方法

总结: 对于 bean 的生命周期,我们需要关注的主要有两个方法: 1. 增强 bean 的功能可以使用后处理 Bean, BeanPostProcessor 2. 如果需要初始化或销毁操作我们可以使用 init-method destroy-method

注意:destroy-method 只对 scope=singleTon 有效果。

原文发布于微信公众号 - java学习(javaxxf)

原文发表时间:2018-04-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Flutter&Dart

DartVM服务器开发(第六天)--利用注解处理请求

下面,如果你跟着仔细操作,你将学会如何使用注解,使用反射获取注解、通过反射调用方法。

26220
来自专栏大闲人柴毛毛

跟着柴毛毛学Spring(3)——简化Bean的配置

通过前面的学习,我们会感觉到对于一个有较多Bean的大项目,Spring的配置会比较复杂。那么接下来我们就介绍如何简化Spring的配置。 简化Spring的配...

30030
来自专栏向治洪

Android数据库Realm实践

Android开发中常用的数据库有5个: 1. OrmLite OrmLite 不是 Android 平台专用的ORM框架,它是Java ORM。支持JDBC连...

26090
来自专栏进击的程序猿

第2章:spring 依赖第2章:spring 依赖

另外在声明具体的值上,我们可以是 Straight values(primitives, Strings),也可以使idref元素,或者是对其他bean的指向,...

8730
来自专栏程序猿DD

Spring Boot中Web应用的统一异常处理

我们在做Web应用的时候,请求处理过程中发生错误是非常常见的情况。Spring Boot提供了一个默认的映射: /error,当处理中抛出异常之后,会转到该请求...

30960
来自专栏阿杜的世界

Spring实战3:装配bean的进阶知识主要内容:

在装配bean—依赖注入的本质一文中,我们探讨了Spring的三种管理bean的方式:自动装配、基于JavaConfig、基于XML文件。这篇文字将探讨一些Sp...

9820
来自专栏刘君君

Builder模式

22850
来自专栏JavaEdge

Bean Validation 介绍及最佳实践关于 Bean ValidationBean Validation 中的 constraint创建一个包含验证逻辑的简单应用(基于 JSP)定制化的 co

31070
来自专栏芋道源码1024

Spring 中注解大全和应用

标识一个该类是Spring MVC controller处理器,用来创建处理http请求的对象.

15120
来自专栏Android 研究

Android跨进程通信IPC之4——AndroidIPC基础1

这里强烈建议把前面两篇文章看一遍,因为前面两篇文章对后面大家对android的IPC的理解帮助很大,本片文章主要内容如下

13930

扫码关注云+社区

领取腾讯云代金券