Spring 学习 对象的⽣命周期、配置⽂件参数化、后置处理Bean

Spring 学习 对象的⽣命周期

  • 1、对象的⽣命周期
    • 1、什么是对象的⽣命周期
    • 2、 为什么要学习对象的⽣命周期
    • ⽣命周期的3个阶段
      • 1、创建阶段
      • 2、、初始化阶段
      • 3、销毁阶段
  • 2、配置⽂件参数化
    • 1、配置⽂件参数的开发步骤
  • 3、⾃定义类型转换器
    • 1、类型转换器
    • 2、⾃定义类型转换器
    • 3、 细节
  • 3、后置处理Bean

1、对象的⽣命周期

Spring 学习 对象的⽣命周期、配置⽂件参数化、后置处理Bean_第1张图片

1、什么是对象的⽣命周期

指的是⼀个对象创建、存活、消亡的⼀个完整过程

2、 为什么要学习对象的⽣命周期

由Spring负责对象的创建、存活、销毁,了解⽣命周期,有利于我们使⽤好Spring为我们创建的对象

⽣命周期的3个阶段

1、创建阶段

Spring⼯⼚何时创建对象
scope=“singleton”
Spring⼯⼚创建的同时,对象的创建
注意:设置scope=singleton 这种情况下 也需要在获取对象的同时,创建对象

scope=“prototype”
Spring⼯⼚会在获取对象的同时,创建对象ctx.getBean("")

2、、初始化阶段

Spring⼯⼚在创建完对象后,调⽤对象的初始化⽅法,完成对应的初始化操作

  1. 初始化⽅法提供:程序员根据需求,提供初始化⽅法,最终完成初始化操作
  2. 初始化⽅法调⽤:Spring⼯⼚进⾏调⽤

InitializingBean接⼝
//程序员根据需求,实现的⽅法,完成初始化操作
public void
afterProperitesSet(){
}

对象中提供⼀个普通的⽅法
public void myInit(){
}

细节分析
1、如果⼀个对象即实现InitializingBean 同时⼜提供的 普通的初始化⽅法 顺序

  1. InitializingBean
  2. 普通初始化⽅法

2、注⼊⼀定发⽣在初始化操作的前⾯
3、什么叫做初始化操作
资源的初始化:数据库 IO ⽹络

3、销毁阶段

Spring销毁对象前,会调⽤对象的销毁⽅法,完成销毁操作

  1. Spring什么时候销毁所创建的对象? ctx.close();
  2. 销毁⽅法:程序员根据⾃⼰的需求,定义销毁⽅法,完成销毁操作
    调⽤:Spring⼯⼚完成调⽤

DisposableBean
public void destroy()throws
Exception{

}

定义⼀个普通的销毁⽅法
public void myDestroy()throws
Exception{
}

细节分析
1.销毁⽅法的操作只适⽤于 scope=“singleton”
2. 什么叫做销毁操作
主要指的就是 资源的释放操作 io.close() 、connection.close();

2、配置⽂件参数化

把Spring配置⽂件中需要经常修改的字符串信息,转移到⼀个更⼩的配置⽂件中

  1. Spring的配置⽂件中存在需要经常修改的字符串?
    存在 以数据库连接相关的参数 代表
  2. 经常变化字符串,在Spring的配置⽂件中,直接修改
    不利于项⽬维护(修改)
  3. 转移到⼀个⼩的配置⽂件(.properties)
    利于维护(修改)

配置⽂件参数化:利于Spring配置⽂件的维护(修改)

1、配置⽂件参数的开发步骤

提供⼀个⼩的配置⽂件(.properities)

名字:随便
放置位置:随便
jdbc.driverClassName =com.mysql.jdbc.Driver
jdbc.url =jdbc:mysql://localhost:3306/suns? useSSL=false
jdbc.username = root
jdbc.password = 123456

Spring的配置⽂件与⼩配置⽂件进⾏整合

applicationContext.xml

在Spring配置⽂件中通过${key}获取⼩配置⽂件中
对应的值
Spring 学习 对象的⽣命周期、配置⽂件参数化、后置处理Bean_第2张图片

3、⾃定义类型转换器

1、类型转换器

作⽤:Spring通过类型转换器把配置⽂件中字符串类型的数据,转换成了对象中成员变量对应类型的数据,进⽽完成了注⼊
Spring 学习 对象的⽣命周期、配置⽂件参数化、后置处理Bean_第3张图片

2、⾃定义类型转换器

原因:当Spring内部没有提供特定类型转换器时,⽽程序员在应⽤的过程中还需要使⽤,那么就需要程序员⾃⼰定义类型转换器

类 implements Converter接⼝

public class MyDateConverter
implements Converter {

 @Override
 public Date convert(String source) {
 Date date = null;
 try {
 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
 date = sdf.parse(source);
 } catch (ParseException e) {
 e.printStackTrace();
 }
 return date;
 }

convert⽅法作⽤:String —> Date
SimpleDateFormat sdf = newSimpleDateFormat();
sdf.parset(String) —> Date
param:source 代表的是配置⽂件中 ⽇期字符串 2020-10-11
return : 当把转换好的Date作为convert⽅法的返回值后,Spring⾃动的为birthday属性进⾏注⼊(赋值)

在Spring的配置⽂件中进⾏配置

MyDateConverter对象创建出来


类型转换器的注册

⽬的:告知Spring框架,我们所创建的MyDateConverter是⼀个类型转换器


 
 
 
 
 

3、 细节

MyDateConverter中的⽇期的格式,通过依赖注⼊的⽅式,由配置⽂件完成赋值。

public class MyDateConverter
implements Converter {
 private String pattern;
 public String getPattern() {
 return pattern;
 }
 public void  setPattern(String pattern) {
 this.pattern = pattern;
 }

public Date convert(String source) {
 Date date = null;
 try { 
   SimpleDateFormat sdf = new SimpleDateFormat(pattern);
   date = sdf.parse(source);
 } catch (ParseException
e) {
 e.printStackTrace();
 }
 return date;
 }
}



 

ConversionSeviceFactoryBean 定义 id属性 值必须conversionService

Spring框架内置⽇期类型的转换器
⽇期格式:2020/05/01 (不⽀持 :2020-05-01)

3、后置处理Bean

BeanPostProcessor作⽤:对Spring⼯⼚所创建的对象,进⾏再加⼯。

AOP底层实现:
注意:BeanPostProcessor接⼝xxxx(){
}
后置处理Bean的运⾏原理分析
Spring 学习 对象的⽣命周期、配置⽂件参数化、后置处理Bean_第4张图片`程序员实现BeanPostProcessor规定接⼝中的⽅法:
Object postProcessBeforeInitiallization(Object bean String beanName)
作⽤:Spring创建完对象,并进⾏注⼊后,可以运⾏Before⽅法进⾏加⼯获得Spring创建好的对象 :通过⽅法的参数最终通过返回值交给Spring框架

实战中:
很少处理Spring的初始化操作:没有必要区分Before After。只需要实现其中的⼀个After⽅法即可
注意:
postProcessBeforeInitiallization
return bean对象

BeanPostProcessor的开发步骤
1、 实现 BeanPostProcessor接⼝

public class MyBeanPostProcessor implements BeanPostProcessor
{
 @Override
 public Object postProcessBeforeInitialization(Object bean, String beanName) throws  BeansException {
 return bean;
 }
//修改了categroy 的name 值
public Object  postProcessAfterInitialization(Object bean, String  beanName) throws BeansException {
 Categroy categroy =(Categroy) bean;

categroy.setName("xiaowb");
 return categroy;
 }
}

Spring的配置⽂件中进⾏配置


BeanPostProcessor细节

BeanPostProcessor会对Spring⼯⼚中所有创建的对象进⾏加⼯。

你可能感兴趣的:(Spring框架)