对象的生命周期、配置文件参数化、自定义类型转换器、后置处理Bean 打卡第四、五天

本文详细介绍了Spring中对象的生命周期,包括创建、初始化和销毁三个阶段,并探讨了为何要学习生命周期。此外,还讲解了配置文件参数化的概念,以及如何通过自定义类型转换器进行数据注入。最后,提到了后置处理Bean(BeanPostProcessor)在AOP中的应用,以及其实现和作用。
摘要由CSDN通过智能技术生成

第十章、对象的生命周期

1.什么是对象的生命周期

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

2.为什么要学习对象的生命周期

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

3.生命周期的3个阶段

创建阶段

Spring工厂何时创建对象

scope =“singleton”

Spring工厂创建的同时,完成对象的创建

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

<bean lazy-init="true"/>

scope = “prototype”

Spring工厂会在获取对象的同时,创建对象

ctx.getBean("")

初始化阶段

Spring工厂在创建对象后,调用对象的初始化方法,完成对应的初始化操作

1.初始化方法提供:程序员根据需求,提供初始化方法,最终完成初始化过程

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

InitialiaingBean接口

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

 public void afterProperitesSet()

对象中提供一个普通方法

public void myInit(){
       
}

<bean id="product" class="com.yusael.life.Product" init-method="myInit"/>

细节分析

1.如果一个对象既实现了InitializingBean接口,同时又提供普通的初始化方法

1.InitializingBean接口

2.普通的初始化方法

2.注入一定发生在初始化之前

3.什么叫做初始化操作

1.资源的初始化:数据库 IO 网络.....

销毁阶段

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

1.Spring什么时候销毁所创建的对象

ctx.close(); 工厂关闭

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

调用:Spring工厂完成调用

DisposableBean接口

#实现DisposableBean接口,调用其中的销毁方法

public class Product implements DisposableBean {
    // 程序员根据自己的需求, 定义销毁方法, 完成销毁操作
    @Override
    public void destroy() throws Exception {
        System.out.println("Product.destroy");
    }
}

定义一个普通的销毁方法

#通过配置文件统一通过普通方法进行销毁

public class Product {
    // 程序员根据自己的需求, 定义销毁方法, 完成销毁操作
    public void myDestory() {
        System.out.println("Product.myDestory");
    }
}
配置文件:
<bean id="product" class="com.yusael.life.Product" destroy-method="myDestory"/>

细节分析

1.销毁方法的操作只适用于scope=“singleton”

2.什么叫销毁操作

1.主要指的就是资源的释放操作: io.close(); connection.close();

第十一章、配置文件参数化 

1.把Spring配置文件中需要经常修改的字符串信息,转移到一个更小的配置文件中

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

存在 以数据库连接相关的参数 代表

2.经常变化的字符串,在Spring配置文件中,直接修改

不利于项目维护(修改)

3.转移到一个小的配置文件(.properties)

有利于维护(修改)

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

1.配置文件参数的开发步骤

提供一个小的配置文件(.properties)

名字:随便
放置位置:随便

#提供一个小的配置文件(.properties)

名字:随便
放置位置:随便

jdbc.driverClassName = com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql://localhost:3306/mysql?useSSL=false
jdbc.username = root
jdbc.password = ll

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

#applicationContext.xml

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

第十二章、自定义类型转换器

1.类型转换器

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

2.自定义类型转换器

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

开发步骤:

类implement Convert接口

public class MyDateConverter implements Converter<String, Date> {
    /*
     convert方法作用: String ---> Date
     SimpleDateFormat sdf = new SimpleDateFormat();
     sdf.parset(String) ---> Date

     参数:
     source : 代表的是配置文件中, 日期字符串 <value>2020-10-11</value>
     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对象创建出来

<bean id = "myDteConverter" class = "xxxx.MyDateConverter"/>

类型转换器的注册

目的:告知Spring框架,我们所创建的MyDateConverter是一个类型转换器
<!--创建 MyDateConverter 对象-->
<bean id="myDateConverter" class="com.yusael.converter.MyDateConverter"/>
<!--用于注册类型转换器-->
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
    <property name="converters">
        <set>
            <ref bean="myDateConverter"/>
        </set>
    </property>
</bean>

<bean id="good" class="com.yusael.converter.Good">
    <property name="name" value="liulei"/>
    <property name="birthday" value="2022-7-26"/>
</bean>

3.细节

MyDateConverter中的日期格式,通过依赖注入的方式,由配置文件进行赋值

public class MyDateConverter implements Converter<String, Date> {
    private String pattern;

    public String getPattern() {
        return pattern;
    }

    public void setPattern(String pattern) {
        this.pattern = pattern;
    }

    /*
          convert方法作用:String--->Date
           SimpleDateFormat sdf = new SimpleDateFormat();
          sdf.parset(String) --->Date

             param:source : 代表的是配置文件中, 日期字符串 <value>2020-10-11</value>
             return:当把转换好的Date作为convert方法返回值后,Spring自动的为birthday属性进行注入(赋值)
             */
    @Override
    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;
    }
}

<bean id="myDateConverter" class="com.liulei.converter.MyDateConverter">
          <property name="pattern" value="yyyy-MM-dd"/>
    </bean>

ConversionServiceFactoryBean定义id属性 值必须为conversionService

Spring框架内置日期类型的转换器

1.日期格式:2022/07/26 不支持{2022-07-26}

十三章、后置处理Bean

BeanPostProcessor作用:对Spring工厂所创建的对象,进行再加工。

AOP底层实现:

注意:BeanPostProcessor接口

xxxx(){

放置需要加工的内容

}

后置处理Bean的运行原理分析

 

程序员实现BeanPostProcessor规定的接口方法:

Object postProcessorBeforeInitialization(Object bean String beanName)

作用:Spring创建完对象,并且完成注入后,可以运行Before方法进行加工

获得Spring创建好的对象:通过方法的参数

最终通过返回值交给Spring框架

Object postProcessorAfterInitialization(Object bean String beanName)

作用:Spring在执行完对象的初始化后,可以运行After方法进行加工

获得Spring创建好的对象:通过方法的参数

最终通过返回值交给Spring框架

实战中:很少处理Spring初始化操作,没有必要区分Before After,只需要实现After方法即可,但是Before方法必须return。

BeanPostProcessor的开发步骤:

1.类实现BeanPostProcessor接口

#实现BeanPostProcessor接口中的两个方法

public class MyBeanPostProcessor implements BeanPostProcessor {
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        return bean;
    }

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
           Category category = (Category) bean;
           category.setName("xiaowangba");
           
        return category;
    }
}

2.Spring配置文件进行配置

<bean id = "myBeanPostProcessor" class = "xxx.myBeanPostProcessor"/>

3.BeanPostProcessor细节

BeanPostProcessor会对Spring工厂所创建的所有对象进行加工

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值