Spring5学习随笔-生命周期、自定义类型转换器、后置处理Bean

这篇具有很好参考价值的文章主要介绍了Spring5学习随笔-生命周期、自定义类型转换器、后置处理Bean。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

学习视频:【孙哥说Spring5:从设计模式到基本应用到应用级底层分析,一次深入浅出的Spring全探索。学不会Spring?只因你未遇见孙哥】

第十章、对象的生命周期

Spring5学习随笔-生命周期、自定义类型转换器、后置处理Bean

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

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

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

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

3.生命周期的3个阶段

  • 创建阶段

    Spring工厂何时创建对象

    • scope=”singleton”

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

      注意:如果要在ctx.getBean(””)的时候创建对象可以设置

    • scope=”prototype”

      Spring工厂会在获取对象的同时,创建对象
      ctx.getBean(””)

  • 初始化阶段

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

    1. 初始化方法提供:程序员根据需求,定义初始化方法,最终完成初始化操作
    2. 初始化方法调用:Spring工厂进行调用
    • InitalizingBean接口

      // 程序员根据需求、实现的方法,完成初始化操作
      public void afterProperitesSet()
      
    • 对象中提供一个普通的方法

      public void myInit(){
      
      }
      // 在配置文件中 调用init-method 也可以实现初始化操作
      <bean id="product" class="xxx.Product" init-method="mtInit"
      
    • 细节分析

      1. 如果一个对象即实现InitializingBean 同时又提供普通的初始化方法,那他们的顺序是什么

        先执行InitialzingBean再执行普通的初始化方法

      2. 注入一定发生再初始化操作的前面

      3. 什么是初始化操作

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

  • 销毁阶段

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

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

      ctx.close();

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

      调用:Spring工厂完成调用

    • DisposableBean (spring提供的接口)

      public void destroy()thorws Exception{
      
      }
      
    • 定义一个普通的销毁方法,在配置文件配置

      <bean id="product"  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/myschool?useSSL=false&amp;allowPublicKeyRetrieval=true
    jdbc.username = root
    jdbc.password = 123456
    
  • Spring的配置文件与小配置文件进行整合

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

Spring5学习随笔-生命周期、自定义类型转换器、后置处理Bean

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

1.类型转换器

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

Spring5学习随笔-生命周期、自定义类型转换器、后置处理Bean

2.自定义类型转换器

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

  • 类Implements Converter接口
public class MyDateConverter implements Converter<String, Date> {
    /*
        convert方法作用:String --->Date
                        SimpleDateFormat.parset("")
        param:source 代表的是配置文件中的 日期字符串 <value>2020-1-2</value>
        return:当把转换好的Date作为convert方法的返回值后,Spring自动为birthday属性进行注入(赋值)
     */
    @Override
    public Date convert(String source) {
        Date date = null;
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        try {
            date = sdf.parse(source);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }
}
  • 在Spring的配置文件中进行配置
    • MyDateConverter对象创建出来

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

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

      <!-- 用于注册类型转换器--> id必须命名为conversionService
      <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.parset("")
            param:source 代表的是配置文件中的 日期字符串 <value>2020-1-2</value>
            return:当把转换好的Date作为convert方法的返回值后,Spring自动为birthday属性进行注入(赋值)
         */
    @Override
    public Date convert(String source) {
        Date date = null;
        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
        try {
            date = sdf.parse(source);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }
}
<!-- Spring创建MyDateConverter类型对象-->
<bean id="myDateConverter" p:pattern="yyyy-MM-dd" class="com.baizhi.converter.MyDateConverter"/>
  • ConversionServiceFactoryBean 定义id属性值 必须为conversionService

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

    日期格式:支持的是:2020/05/01(2020-05-01是不支持的)

第十三章、后置处理Bean

Aop底层实现:
注意:BeanPostProcessor是一个接口,把想要的加工操作写在接口所规定的方法中。

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

Spring5学习随笔-生命周期、自定义类型转换器、后置处理Bean

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

    1. Object postProcessBeforeInitiallization(Object bean,String beanName)
      1. 作用:Spring创建完对象,并进行注入后,可以运行Before方法进行加工
      2. 获得Spring创建好的对象:通过方法的参数
      3. 最终通过返回值交给Spring框架
    2. Object postProcessAfterInitiallization(Object bean,String beanName)
      1. 作用:Spring执行完对象的初始化操作后,可以运行After方法进行加工
      2. 获得Spring创建好的对象:通过方法的参数
      3. 最终通过返回值交给Spring框架

    实战中:很少处理Spring的初始化操作:没有必要区分Before、After。只需要实现其中的一个After方法即可(实现了初始化,再做区分)

    注意:postProcessAfterInitiallization(一定要返回bean对象)

     return bean
    
  • BeanPostProcess的开发步骤

    1. 类实现BeanPostProcess接口

      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("xiaowb");
              return categroy;
          }
      }
      
    2. Spring的配置文件中进行配置

      <bean id="myBeanPostProcessor" class="com.baizhi.beanpost.MyBeanPostProcessor"></bean>
      
    3. BeanPostProcessor细节

      BeanPostProcessor会对Spring工厂中创建的所有对象进行加工,所以要对要修改的对象进行保护

      @Override
      public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
      		// 加上保护
          if (bean instanceof Categroy) {
              Categroy categroy = (Categroy) bean;
              categroy.setName("xiaowb");
          }
          return bean;
      }
      

下一章Spring5学习随笔-AOP系列Spring动态代理文章来源地址https://www.toymoban.com/news/detail-746451.html

到了这里,关于Spring5学习随笔-生命周期、自定义类型转换器、后置处理Bean的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring5学习随笔-Set注入详解和构造注入

    学习视频:【孙哥说Spring5:从设计模式到基本应用到应用级底层分析,一次深入浅出的Spring全探索。学不会Spring?只因你未遇见孙哥】 通过Spring工厂及配置文件,为所创建对象的成员变量赋值 “通过编码的方式,为成员遍历进行赋值,存在耦合” 类为成员变量提供set方法

    2024年02月05日
    浏览(41)
  • Spring5学习随笔-整合MyBatis(持久层)、连接池、Mapper文件

    学习视频:【孙哥说Spring5:从设计模式到基本应用到应用级底层分析,一次深入浅出的Spring全探索。学不会Spring?只因你未遇见孙哥】 JavaEE开发需要持久层进行数据库的访问操作。 JDBC MyBatis、Hibernate进行持久开发过程存在大量的代码冗余 Spring基于模板设计模式对与上述的持

    2024年02月05日
    浏览(38)
  • Spring5学习随笔-高级注解(@ComponentScan、@Configuration.....),替换XML配置文件

    学习视频:【孙哥说Spring5:从设计模式到基本应用到应用级底层分析,一次深入浅出的Spring全探索。学不会Spring?只因你未遇见孙哥】 Spring在3.x提供的新的注解,用于替换XML配置文件。 问题 : 配置Bean在应用的过程中替换了XML具体的什么内容? AnnotationConfigApplicationContext 配

    2024年02月05日
    浏览(33)
  • Spring5学习随笔-IOC(反转控制)、DI(依赖注入)和创建复杂对象

    学习视频:【孙哥说Spring5:从设计模式到基本应用到应用级底层分析,一次深入浅出的Spring全探索。学不会Spring?只因你未遇见孙哥】 控制:对于成员变量赋值的控制权 反转控制:把对于成员变量赋值的控制权,从代码中反转(转移)到Spring工厂和配置文件中。 好处:解耦合

    2024年02月05日
    浏览(29)
  • Spring MVC自定义类型转换器!!!

    使用场景 在index.jsp里面添加日期类型 在pojo里面添加日期类型 测试 原因:我们前台传递的是字符串类型的参数,但是后台使用的是Date类型接收的。我们期望springmvc可以帮我们做数据类型的自动转换,显然没有做,所以我们需要自己自定义类型转换器。 解决方案: 定义一个

    2024年02月03日
    浏览(28)
  • Spring MVC获取参数和自定义参数类型转换器及编码过滤器

    目录   一、使用Servlet原生对象获取参数 1.1 控制器方法 1.2 测试结果 二、自定义参数类型转换器 2.1 编写类型转换器类 2.2 注册类型转换器对象  2.3 测试结果  三、编码过滤器 3.1 JSP表单 3.2 控制器方法 3.3 配置过滤器 3.4 测试结果  往期专栏文章相关导读  1. Maven系列专

    2024年02月10日
    浏览(33)
  • 【Spring学习】Bean对象的作用域和生命周期,了解了这些你就真正熟悉spring框架了.

    前言: 大家好,我是 良辰丫 ,我们已经学会了Spring的存取,今天我们将一起来学习Bean对象的作用域和生命周期.💌💌💌 🧑个人主页:良辰针不戳 📖所属专栏:javaEE进阶篇之框架学习 🍎励志语句:生活也许会让我们遍体鳞伤,但最终这些伤口会成为我们一辈子的财富。 💦期

    2024年02月07日
    浏览(48)
  • 【SpringBoot系列】Spring Boot Bean Factory的生命周期 Spring Boot学习大纲,可以留言自己想了解的技术点

    继续完成既定的任务,走起 可以概括为以下步骤: 资源加载:Spring Boot 应用程序启动时,会扫描指定的路径,加载配置文件和类文件等资源。 配置加载:Spring Boot 会根据配置文件(比如 application.properties)中的配置,创建一个 Environment 对象,用于保存应用程序的配置信息。

    2024年02月05日
    浏览(47)
  • SpringBoot复习:(59)自定义类型转换器

    一、自定义类型转换器: 二、将自定义类型转换器注册到Spring boot 三、请求测试:

    2024年02月10日
    浏览(32)
  • Spring Boot学习随笔- 实现AOP(JoinPoint、ProceedingJoinPoint、自定义注解类实现切面)

    学习视频:【编程不良人】2021年SpringBoot最新最全教程 问题 现有业务层开发存在问题 额外功能代码存在大量冗余 每个方法都需要书写一遍额外功能代码不利于项目维护 Spring中的AOP AOP:Aspect 切面 + Oriented 面向 Programmaing 面向切面编程 Aspect(切面) = Advice(通知) + Pointcut(

    2024年02月04日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包