为了账号安全,请及时绑定邮箱和手机立即绑定

spring-运行时值注入

标签:
Java

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

复制代码

<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;

@Componentpublic 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、集合操作 略

原文出处:https://www.cnblogs.com/shixiemayi/p/9551388.html

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消