IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Day380.??高级特性 -Spring5 -> 正文阅读

[Java知识库]Day380.??高级特性 -Spring5

???级特性

一、对象的?命周期

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I4F7SX2l-1630744142061)(C:/Users/PePe/AppData/Roaming/Typora/typora-user-images/image-20210903221445341.png)]

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

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


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

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


3. ?命周期的3个阶段

  • 创建阶段

    Spring??何时创建对象

    • scope=“singleton”

      Spring??创建的同时,对象的创建

      注意:设置scope=singleton 这种情况下 也需要在获取对象的同时,创建对象,通过lazy-init属性

      <bean lazy-init="true"/>
      
    • scope=“prototype”

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

      ctx.getBean("")
      
  • 初始化阶段

    Spring??在创建完对象后,调?对象的初始化?法,完成对应的初始化操作

    1. 初始化?法提供:程序员根据需求,提供初始化?法,最终完成初始化操作
    2. 初始化?法调?:Spring??进?调?
    • 实现InitializingBean接?

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3w18r6x0-1630744142063)(C:/Users/PePe/AppData/Roaming/Typora/typora-user-images/image-20210903224222076.png)]

      //程序员根据需求,实现的?法,完成初始化操作
      public void afterProperitesSet(){}
      
    • 对象中提供?个普通的?法,通过init-method标签来指明该方法为初始化方法

      public void myInit(){}
      
      <bean id="product" class="xxx.Product" init-method="myInit"/>
      
    • 细节分析

      • 如果?个对象即实现InitializingBean 同时?提供的 普通的初始化?法 顺序

        1. InitializingBean
        2. 普通初始化?法
      • 注??定发?在初始化操作的前?

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m6n8dqum-1630744142065)(C:/Users/PePe/AppData/Roaming/Typora/typora-user-images/image-20210903225820964.png)]

      • 什么叫做初始化操作

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

  • 销毁阶段

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

    1. Spring什么时候销毁所创建的对象?
      ctx.close();//关闭工程前执行
    2. 销毁?法:程序员根据??的需求,定义销毁?法,完成销毁操作
      调?:Spring??完成调?
    • 实现DisposableBean接口

      public void destroy()throws Exception{}
      
    • 定义?个普通的销毁?法,通过destroy-method标签,指明初始化方法

      public void myDestroy()throws Exception{}
      
      <bean id="" class="" init-method="" destroy-method="myDestroy"/>
      
    • 细节分析

      1. 销毁?法的操作只适?于 scope="singleton"

      2. 什么叫做销毁操作

      主要指的就是资源的释放操作(关闭连接等) io.close() ,connection.close();


二、配置?件参数化

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

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

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


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

  • 提供?个?的配置?件(.properities)

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

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

- **Spring的配置?件与?配置?件进?整合**

applicationContext.xml

?```xml
<context:property-placeholder location="classpath:/db.properties"/>
  • 在Spring配置?件中通过${key}获取?配置?件中对应的值

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MOtsTZzj-1630744142067)(C:/Users/PePe/AppData/Roaming/Typora/typora-user-images/image-20210904132727852.png)]


三、?定义类型转换器

1. 类型转换器

  • 作?

    Spring通过类型转换器把配置?件中字符串类型的数据,转换成了对象中成员变量对应类型的数据,进?完成了注?

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2ETIdiGQ-1630744142069)(C:/Users/PePe/AppData/Roaming/Typora/typora-user-images/image-20210904153118661.png)]


2. ?定义类型转换器

  • 原因

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

  • 类 implements Converter接?

    public class MyDateConverter implements Converter<String, Date> {
        /*
    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("yyyy-MM-dd");
                date = sdf.parse(source);
            } catch (ParseException e) {
                e.printStackTrace();
            }
            return date;
        }
    }
    
  • 在Spring的配置?件中进?配置

    • MyDateConverter对象创建出来

      <bean id="myDateConverter" class="xxxx.MyDateConverter"/> 
      
    • 类型转换器的注册

      • ?的:告知Spring框架,我们所创建的MyDateConverter是?个类型转换器
      <!--?于注册类型转换器-->
      <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
          <property name="converters">
              <set>
                  <ref bean="myDateConverter"/>
              </set>
          </property>
      </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;
        }
    }
    
    <!--Spring创建MyDateConverter类型对象-->
    <bean id="myDateConverter"
          class="com.baizhiedu.converter.MyDateConverter">
        <property name="pattern" value="yyyy-MM-dd"/>
    </bean>
    
  • ConversionSeviceFactoryBean 定义 id属性 值必须 conversionService

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

    ?期格式:2020/05/01 (不?持 :2020-05-01)


四、后置处理Bean

  • BeanPostProcessor作?对Spring??所创建的对象,进?再加?

  • AOP底层实现

注意:BeanPostProcessor接?
    xxxx(){
}
  • 后置处理Bean的运?原理分析

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1q9y3V1Q-1630744142071)(C:/Users/PePe/AppData/Roaming/Typora/typora-user-images/image-20210904160413434.png)]

程序员实现 BeanPostProcessor 规定接?中的?法:
    Object postProcessBeforeInitiallization(Object bean String beanName)
    作?:Spring创建完对象,并进?注?后,可以运?Before?法进?加?
    获得Spring创建好的对象 :通过?法的参数最终通过返回值交给Spring框架
    
    Object postProcessAfterInitiallization(Object bean String beanName)
    作?:Spring执?完对象的初始化操作后,可以运?After?法进?加?获得Spring创建好的对象 :通过?法的参数
    最终通过返回值交给Spring框架
    
    实战中:
    很少处理Spring的初始化操作:没有必要区分Before After。只需要实现其中的?个After?法即可
    注意:
    postProcessBeforeInitiallization
    return bean对象
  • 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 {
              Categroy categroy = (Categroy) bean;
              categroy.setName("achang");
              return categroy;
          }
          
      }
      
    • Spring的配置?件中进?配置

      <bean id="myBeanPostProcessor" class="xxx.MyBeanPostProcessor"/>
      
    • BeanPostProcessor细节

      BeanPostProcessor会对Spring??中所有创建对象进?加?


  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-09-05 10:40:31  更:2021-09-05 10:41:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 12:48:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码