Spring学习笔记:配置文件参数化、自定义类型转换器、后置处理Bean

Spring笔记汇总

配置文件参数化

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

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

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

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

  • 不利于项目维护(修改)

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

  • 利于维护(修改)

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

在这里插入图片描述
开发步骤

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

    名字 和 放置位置: 任意
    
    jdbc.driverClassName = com.mysql.cj.jdbc.Driver
    jdbc.url = jdbc:mysql://localhost:3306/test
    jdbc.username = root
    jdbc.password = 123456
    
  • Spring的配置文件与小配置文件进行整合

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

    在这里插入图片描述

注意:

Maven项目下 java与resource是平级的,故下面的文件也是平级的
在这里插入图片描述

自定义类型转换器

1、类型转换器

作用:Spring通过类型转换器把配置文件中字符串类型的数据,转换成了对象中成员变量对应类型的数据,进而完成了注入
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NvjTo1PM-1590469521303)(spring_b站2.assets/image-20200526113833233.png)]

2、自定义类型转换器

在这里插入图片描述

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

  • 类implements Converter接口

    • // S是配置文件赋予类型,T是想要转换成的类型
      implements Converter<S,T>
      
  • 在Spring的配置文件中进行配置

    • MyDateConverter对象创建出来
    package com.company.converter;
    
    import org.springframework.core.convert.converter.Converter;
    
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    /**
     * Converter<String,Date> :由String -->  Date
     */
    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是一 个类型转换器
    • 在这里插入图片描述
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pZbxIFaV-1590469521307)(spring_b站2.assets/image-20200526130247283.png)]

3、细节分析

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

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

	get和set
        
    @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.company.converter.MyDateConverter">
    <property name="pattern" value="yyyy-MM-dd"/>
</bean>

ConversionSeviceFactoryBean定义id属性值必须conversionService

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

日期格式: 2020/05/04	(不支持2020-05-04)

后置处理Bean

BeanPostProcessor作用: 对Spring工厂所创建的对象,进行再加工。
    
AOP底层实现:

注意: BeanPostProcessor接口
        xxxx(){

        }

在这里插入图片描述

程序员实现BeanPostProcessor规定接口中的方法:实现上图操作

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

BeanPostProcessor的开发步骤

1、类实现BeanPostProcessor接口

package com.company.beanpost;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.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 {

//        进行对象的保护
        if (bean instanceof Category){
            Category category = (Category)bean;
            category.setName("李四");
        }

        return bean;
    }
}

2、Spring的配置文件中进行配置

<bean id="category" class="com.company.beanpost.Category">
    <property name="id" value="1"/>
    <property name="name" value="张三"/>
</bean>

<!-- 会对这个文件配置的所有的对象生效   -->
<bean id="myBeanPostProcessor" class="com.company.beanpost.MyBeanPostProcessor"/>

3、BeanPostProcessor细节

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

代理设计模式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值