• spring-运行时值注入


    在项目中经常使用连接数据库的配置,如下所示

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
            <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
            <property name="url" value="jdbc:oracle:thin:@db.dev.cc.cmbc.com.cn:1521:testDb" />
            <property name="username" value="testDbUser" />
            <property name="password" value="123456" />
    </bean>

      每个属性都是硬编码,有时候我们希望避免硬编码,而是想让这些值在运行时候再确定。Spring提供了两种在运行时求值的方式:属性占位符和Spring表达式语言

    1、属性占位符:使用${...}包装属性名称

    a、引入properties文件

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

    test.properties文件内容

    jdbc.driver=oracle.jdbc.driver.OracleDriver
    jdbc.url=jdbc:oracle:thin:@db.dev.cc.cmbc.com.cn:1521:testDb
    jdbc.username=testDbUser
    jdbc.password=123456

    b、避免硬编码的配置:

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
            <property name="driverClassName" value="${jdbc.driver}" />
            <property name="url" value="${jdbc.url}" />
            <property name="username" value="${jdbc.username}" />
            <property name="password" value="${jdbc.password}" />
    </bean>

    也可以通过注解的方式避免硬编码:

    package com.cn.pojo;
    
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Component;
    
    @Component
    public class JdbcUtil {
    
    
        @Value("jdbc.driver")
        private String driver;
        @Value("jdbc.url")
        private String url;
        @Value("jdbc.username")
        private String username;
        @Value("jdbc.password")
        private String password;
        
        //...
    }

    2、Spring表达式:使用#{...}包含SpEL表达式

    a、使用bean的ID引用bean

      #{person1}

    b、调用方法和访问对象的属性

      #{person1.age}  

      #{persion1.getName()}  对于bean方法的方法返回值,也可以调用方法 #{person1.getCar().getCarName()} ,如果person1.getCar()返回为null,则会抛出空指针异常,Spring提供了类型安全的运算符"?.", #{persion1.getCar()?.getCarName()} 如果person.getCar()不为空,则调用getCarName()获取返回值,否则,返回null

      #{T(java.lang.Math).PI}  在表达式中使用类型调用静态属性和方法,必须使用T()运算符

      #{T(java.lang.Math).random()}

    c、对值进行算术、关系、逻辑运算

      #{2*T(java.lang.Math).PI*26}

      #{person1.getAge()==90}

      #{person1.getAge()>90?"年龄大于90":"年龄小于等于90"} 三元运算通常用于判null

      #{person.getName()+"DY"} 当“+”运算符的操作数有字符串时,执行的是连接操作

    d、集合操作 略

  • 相关阅读:
    freemarker时间转换197
    用FileZilla服务器端和客户端实现本机与虚拟机之间文件上传和下载197
    springboot pom 详解197
    eclipse svn197
    eclipse 安装git197
    listen()函数中backlog参数分析
    linux 函数库使用
    gdb调试问题汇总
    gdb调试多线程
    linux-C 多线程编程
  • 原文地址:https://www.cnblogs.com/shixiemayi/p/9551388.html
Copyright © 2020-2023  润新知