【Spring5,Java者升职加薪的8项技能

本文详细阐述了Spring工厂对象的创建、初始化、销毁阶段,包括scope的影响,以及配置文件参数化、自定义类型转换器的应用。涵盖了InitializingBean、DisposableBean接口的使用和生命周期管理的关键点。
  • 创建阶段 —> 初始化阶段 —> 销毁阶段

[](

)创建阶段


Spring 工厂何时创建对象?

  • scope="prototype":Spring 工厂在获取对象 ctx.getBean("xxx") 的同时,创建对象。

  • scope="singleton":Spring 工厂(IoC 容器)创建的同时,创建对象。

通过配置 <bean lazy-init="true"/> 也可以实现工厂获取对象的同时,创建对象。

[](

)初始化阶段 - InitializingBean、init-method


什么时候?Spring 工厂在创建完对象后,调用对象的初始化方法,完成对应的初始化操作。

初始化方法提供:程序员根据需求,提供初始化方法,最终完成初始化操作。

初始化方法调用:Spring 工厂进行调用。

提供初始化方法的两种方式:

  1. InitializingBean 接口:

public class Product implements InitializingBean {

//程序员根据需求实现的方法, 完成初始化操作

@Override

public void afterPropertiesSet() throws Exception {

System.out.println(“Product.afterPropertiesSet”);

}

}

  1. 对象中提供一个普通的初始化方法,配置文件种配置 init-method

public class Product {

public void myInit() {

System.out.println(“Product.myInit”);

}

}


初始化操作的细节分析:

  1. 如果⼀个对象既实现 InitializingBean 同时又提供的 普通的初始化方法,执行顺序?

答:先执行 InitializingBean,再执行 普通初始化方法。

  1. 注入⼀定发生在初始化操作的前面。

  2. 初始化操作到底是什么?

资源的初始化:数据库、IO、网络、…

[](

)销毁阶段 - DisposableBean、destroy-method


Spring 销毁对象前,会调用对象的销毁方法,完成销毁操作。

Spring 什么时候销毁所创建的对象?ctx.close();

销毁方法提供:程序员根据业务需求,定义销毁方法,完成销毁操作

销毁方法调用:Spring 工厂进行调用。

开发流程与初始化操作一样,提供销毁方法的两种方式:

  1. DisposableBean 接口:

public class Product implements DisposableBean {

// 程序员根据自己的需求, 定义销毁方法, 完成销毁操作

@Override

public void destroy() throws Exception {

System.out.println(“Product.destroy”);

}

}

  1. 对象中提供一个普通的销毁方法,配置文件种配置 destroy-method

public class Product {

// 程序员根据自己的需求, 定义销毁方法, 完成销毁操作

public void myDestory() {

System.out.println(“Product.myDestory”);

}

}


销毁阶段细节分析

  1. 销毁方法的操作只适用于 scope="singleton",初始化操作都适用。

  2. 销毁操作到底是什么?

资源的释放:io.close()connection.close()、…

[](

)对象的生命周期总结


public class Product implements InitializingBean, DisposableBean {

private String name;

public String getName() {

return name;

}

public void setName(String name) {

System.out.println(“Product.setName”);

this.name = name;

}

Product() { // 创建

System.out.println(“Product.Product”);

}

// 程序员根据需求实现的方法, 完成初始化操作

public void myInit() {

System.out.println(“Product.myInit”);

}

// 程序员根据需求实现的方法, 完成初始化操作

@Override

public void afterPropertiesSet() throws Exception {

System.out.println(“Product.afterPropertiesSet”);

}

public void myDestory() {

System.out.println(“Product.myDestory”);

}

// 程序员根据自己的需求, 定义销毁方法, 完成销毁操作

@Override

public void destroy() throws Exception {

System.out.println(“Product.destroy”);

}

}

在这里插入图片描述

[](

)配置文件参数化

==========================================================================

配置文件参数化:把 Spring 配置文件中需要经常修改的字符串信息,转移到⼀个更小的配置文件中。

  1. Spring 的配置文件中是否存在需要经常修改的字符串?

存在:以数据库连接相关的参数…

  1. 经常变化字符串,在 Spring 的配置文件中,直接修改不利于项目维护(修改)

  2. 转移到⼀个小的配置文件(.properties)利于维护(修改)

优点:利于 Spring 配置文件的维护(修改)

[](

)配置文件参数的开发步骤


  • 提供⼀个小的配置文件(.properities)

名字:没有要求

放置位置:没有要求

jdbc.driverClassName = com.mysql.jdbc.Driver

jdbc.url = jdbc:mysql://localhost:3306/spring?useSSL=false

jdbc.username = root

jdbc.password = 1234

  • Spring 的配置文件与小配置文件进行整合:

<context:property-placeholder location=“classpath:/db.properties”/>

在 Spring 配置文件中通过 ${key} 获取小配置文件中对应的值:

[](

)自定义类型转换器

===========================================================================

[](

)类型转换器


作用:Spring 通过 类型转换器 把 配置文件 中 字符串 类型的数据,转换成了对象中成员变量对应类型的数据,进而完成了注入。

在这里插入图片描述

[](

)自定义类型转换器


产生原因:当 Spring 内部没有提供特定类型转换器时,而程序员在应用的过程中还需要使用,那么就需要程序员自己定义类型转换器。

[开发步骤]

  • 类 implements Converter 接口

public class MyDateConverter implements Converter<String, Date> {

/*

convert方法作用: String —> Date

SimpleDateFormat sdf = new SimpleDateFormat();

sdf.parset(String) —> Date

参数:

source : 代表的是配置文件中, 日期字符串 2020-10-11

return : 当把转换好的 Date 作为 convert 方法的返回值后,

Spring ⾃动的为birthday属性进行注入(赋值)

*/

@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;

}

}

  • 在 Spring 的配置文件中进行配置;

先创建 MyDateConverter 对象,再注册类型转换器;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值