zoukankan      html  css  js  c++  java
  • 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、集合操作 略

  • 相关阅读:
    Centos7 安装 MySQL5.7
    搭建Harbor企业级docker仓库
    HAProxy安装文档
    mysqlbinlog查看 binlog日志报错mysqlbinlog: unknown variable 'default-character-set=utf8mb4'
    mysql删除数据库报错及解决方法
    服务器流量异常排查步骤(查看进程的流量)
    基于Docker Hub镜像的ProxySQL容器化部署与运行
    ProxySQL环境下,快速处理异常会话的方法(黑名单、KILL)
    DB2 SQL 错误(SQLCODE:-964,SQLSTATE:57011)处理方法
    pg_hba.conf、pool_hba.conf 以及 pool_passwd 三者间的关系
  • 原文地址:https://www.cnblogs.com/shixiemayi/p/9551388.html
Copyright © 2011-2022 走看看