Spring Bean的生命周期和作用域

我们先说下Spring Bean的管理

首先会实例化Bean对象

设置Bean属性

对于声明了依赖关系,则会诸如Bean相关的依赖关系,会诸如Bean对容器基础设施层面的依赖,包括BeanNameAware BeanFactoryAware 和 ApplicationContextAware

调用BeanPostProcessor的前置初始化方法 postProcessBeforeInitialization

如果实现了InitializingBean接口,调用afterPropertiesSet方法

调用Bean自身定义的init方法

调用BeanPostProcessor的后置初始化方法 postProcessAfterInitialization

创建完成

图片

Spring Bean的销毁过程会依次调用的DispoasbleBean的destroy方法,和Bean自身定义destroy方法

Spring Bean有五个作用域

基础的有如下两种

singleton 默认作用域 IOC容器创建唯一的一个Bean

Protortype 针对每个getBean的请求,创建一个Bean实例’

对于Web容器,则由其他的作用域

Request 为每个Http请求创建单独的Bean实例

Session Bean的作用域是Session范围

GlobalSession 作用域Portlet容器,每个Protlet有单独的Session,GlobalSession提供一个全局的HTTP Session

Beand的声明周期交由容器管理,从属性设置到各种依赖关系,都是容器去负责的,Spring容器为应用开发者定义了清晰的生命周期

那么在整个Bean的声明周期所提供的控制翻转功能,亦可以叫依赖注入,广泛的应用于Spring框架中,增加了耦合的能力

从Bean的创建过程可以看,依赖关系都是容器负责注入,具体的实现方式包含带参数的构造函数 setter或者AutoWired方法

常见的Spring生态有

Spring Boot,利用整合通用实践,来更加自动的依赖管理,SpringBoot提供了不同应用的快速开发基础

Spring Cloud 看做是Spring Boot 基础上上更加高层的框架,提供了分布式系统的通用模式,包含了服务发现和服务注册

然后是内部的技术

我们分析了AOP的实现原理,基于cglib或者JDK动态地实现的,实例了代理对象

AOP引入了几个关键概念

1.Aspect ,用于跨不同类层面的横切概念,可以在XML中配置,可以利用@Aspect进行注解

在运行的时候,可以创建类型Advisor进行指代

2.Join Point,是Aspect的切入点,只有方法可以作为Join Point

3.Advice,定义了切面中能够采用的动作

图片

PointCut,定义了Aspect被应用到哪些Join Point上,可以通过指定具体的类名以及方法名来实现,或者利用正则来实现

Join Point提供了具体的被应用者

Pointcut 表示切面的Where,哪些机会点可以用于某个切面动作

Advice明确了切面编程的What,说明要做什么

而且AOP并不是Spring唯一支持的切面技术,比如,在Java平台,我们可以使用Java Agent,在类加载的过程对字节码进行操作,比如修改或者替换方法实现

对于Spring平台,我们可以使用AspectJ,具有更加全面的能力,使用起来更加复杂

发表评论

邮箱地址不会被公开。 必填项已用*标注