spring -5配置文件参数化及类型转换器

目录

 

配置文件参数化;

类型转换器:


配置文件参数化;

---就是额外的配置文件

比如jdbc的连接参数,在代码直接写。不太好,修改的时候,涉及到了修改代码。耦合性高。

依赖注入:Connection对象依赖这四个参数,那么就把它当做属性。这些参数涉及到了频繁修改,所以需要参数化。

1,提供一个小配置文件(properties文件)名字随便,位置随便(推荐resource下)。

2,spring配置文件和小配置文件的整合。

Java类

public class ConnectionFactory implements FactoryBean<Connection> {

    private String  driver;
    private String url;
    private String username;
    private String password;

    public String getDriver() {
        return driver;
    }

    public void setDriver(String driver) {
        this.driver = driver;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    //获得对象的代码
    @Override
    public Connection getObject() throws ClassNotFoundException {
        Class.forName(driver);
        Connection conn = null;
        try {
            conn = DriverManager.getConnection(url,username,password);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return conn;
    }
    //获得对象的class类型
    @Override
    public Class<?> getObjectType() {
        return Connection.class;
    }
    //默认是true,表示获取的是单例
//    是否是单例对象
    @Override
    public boolean isSingleton() {
        return false;
    }
}

XML中

<!--配置文件引入-->
    <context:property-placeholder location="classpath:mysql.properties"/>

    <bean id="conn" class="begin.ConnectionFactory">
        <property name="driver" value="${jdbc.driver}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>

外部配置文件mysql.properties

jdbc.driver = com.mysql.cj.jdbc.Driver
jdbc.url = jdbc:mysql://localhost:3306/demo?serverTimezone=UTC
jdbc.password = 1234
jdbc.username =  root

test代码:

   @org.junit.Test
    public void test4(){
        ApplicationContext ctx = new ClassPathXmlApplicationContext("/applicationContext.xml");
        Connection conn = (Connection) ctx.getBean("conn");
        System.out.println(conn);
    }

结果:

类型转换器:

spring的配置文件中的value标签是8种基本类型。

为什么可以把字符串转赋值给各种数据类型呢?spring内置类型转换器,即通过反射得到各类属性的类型,然后通过各种判断,类型转换得到。

自定义类型转换器?比如说 2020-08-20 12:12:12这样的类型spring不支持。

自己定义。

1,创建一个类,实现Converter<T,R>接口。T表示传参类型,R表示返回数据类型。spring自动地为R的属性注入。

org.springframework.core.convert.converter.Converter
public class ConvertDate implements Converter<String, Date> {
    @Override
    public Date convert(String s) {
        Date ret = null;
        try {
            ret =new SimpleDateFormat("yyyy-MM-dd").parse(s);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return ret;
    }
}

2,在spring配置文件中进行配置(实例化对象转换器)。

首先把对象转换器进行实例化--bean

3,注册类转换器。目的:告诉spring,我们自定义了一个类型转换器。

<!--先实例化类型转化器-->
    <bean id="dateConvert" class="begin.ConvertDate"></bean>
<!--    注册类型转化器 这个id不能变,必须是这个id,因为spring框架默认引用此id进行处理-->
    <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<!--        该类中有此属性,且是一个set-->
        <property name="converters">
            <set>
                <ref bean="dateConvert"/>
            </set>
        </property>
    </bean>
<bean id="person" class="begin.Person">
    <property name="name" value="alice"/>
    <property name="age" value="18"/>
    <property name="birthday" value="2020-12-20"/>
</bean>

结果:

spring内部默认的日期类型转换器是处理类型- 2021/02/04 。以  ‘/’   间隔的类型

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值