当前位置: 首页 > news >正文

Spring中@Value的三种使用方式

Spring中@Value的三种使用方式

文章目录

  • Spring中@Value的三种使用方式
    • 1. 注入普通属性
    • 2.注入配置文件
    • 3. 注入表达式并运算

@Value的作用是什么?我们可以从 Spring官方文档里面找到这样的一句话:

image-20220212232240207

接下来我们看下@Value注入外部属性的三种方式:

1. 注入普通属性

@Value注解可以注入一些字段的普通属性,并且会自动进行类型转换

image-20220212233940485

栗子:

@Repository
public class ConnectionPool {
    @Value("jdbc:mysql://localhost:3306/test")
    private String url;
    @Value("com.mysql.jdbc.Driver")
    private String driveName;
    @Value("Scott")
    private String userName;
    @Value("10")
    private int no;
    //重写下toString方法
}

定义配置类,用于扫描bean

@Configuration
@ComponentScan("com.fx.dao")
public class myConfig2 { }

测试一下:

@Test
public void test01(){
    ApplicationContext context = new AnnotationConfigApplicationContext(myConfig2.class);
    ConnectionPool connectionPool = context.getBean("connectionPool", ConnectionPool.class);
    System.out.println(connectionPool.toString());
}

输出:

ConnectionPool{url='jdbc:mysql://localhost:3306/test', driveName='com.mysql.jdbc.Driver', userName='Scott',no=10}

2.注入配置文件

可以通过@Value("${}")来注入配置文件里面的信息

栗子:

@Repository
public class ConnectionPool {
    @Value("jdbc:mysql://localhost:3306/test")
    private String url;
    @Value("com.mysql.jdbc.Driver")
    private String driveName;
    @Value("Scott")
    private String userName;
    @Value("10")
    private int no;
    @Value("${mysql.pwd}")
    //重写下toString方法
}

修改下配置类,扫描配置文件:

@Configuration
@ComponentScan("com.fx.dao")
@PropertySource({"classpath:db.properties"})
public class myConfig2 { }

db.properties配置文件放在resources目录下,使用@PropertySource注解扫描的classpath就是此路径

mysql.pwd=123456

测试代码和上面一样我们输出下结果:

ConnectionPool{url='jdbc:mysql://localhost:3306/test', driveName='com.mysql.jdbc.Driver', userName='Scott', no=10, pwd='123456'}

3. 注入表达式并运算

image-20220212234040749

SpEl(Spring Expression Language ),是Spring的表达式语言,很多框架中都有自己的El表达式,Spring中El表达式支持的功能有很多,在官方文档里面有详细的介绍和用例。

栗子:

例如我想动态获得运行机器的核心数作为参数注入

@Repository
public class ConnectionPool {
    @Value("jdbc:mysql://localhost:3306/test")
    private String url;
    @Value("com.mysql.jdbc.Driver")
    private String driveName;
    @Value("Scott")
    private String userName;
    @Value("10")
    private int no;
    @Value("${mysql.pwd}")
    private String pwd;
    @Value("#{T(java.lang.Runtime).getRuntime().availableProcessors()}")
    private int minCons;
    @Value("#{T(java.lang.Runtime).getRuntime().availableProcessors() * 2}")
    private int maxCons;
    //toString方法
}

测试用例和配置类不变,我们输出一下结果:

ConnectionPool{url='jdbc:mysql://localhost:3306/test', driveName='com.mysql.jdbc.Driver', userName='Scott', no=10, pwd='123456', minCons=8, maxCons=16}

可以看到SpEl里执行了我们想要运行的代码

当然我们还可以用@Value执行更多更厉害的EL表达式,官方文档

image-20220212235845224

最后

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

小编已加密:aHR0cHM6Ly9kb2NzLnFxLmNvbS9kb2MvRFVrVm9aSGxQZUVsTlkwUnc==出于安全原因,我们把网站通过base64编码了,大家可以通过base64解码把网址获取下来。

相关文章:

  • 诚信型性格分析,诚信型人格的职业发展
  • Python常考面试题汇总
  • 均薪36W还缺人,DFT工程师到底有多重要?
  • mybatis-plus实现多租户Saas
  • 使用Python以UCI心脏病数据集为例,进行数据简单分析
  • URL编码解码详解
  • win10+ubuntu双系统下载ubuntu方法(卸载系统不完整会进入grub)
  • Spring事务传播机制
  • 实现深度理解函数指针
  • C/C++常用预编译指令介绍
  • 杰理强制升级工具4.0使用和原理解析
  • Vue3介绍和安装
  • Linux命令--权限(chmod、chown)--使用/实例
  • flink-sql所有语法详解
  • 【图像分割】基于matlab萤火虫算法图像聚类分割【含Matlab源码 2106期】
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • HTML-表单
  • JDK 6和JDK 7中的substring()方法
  • Laravel 菜鸟晋级之路
  • Linux gpio口使用方法
  • Mocha测试初探
  • mysql外键的使用
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • 测试如何在敏捷团队中工作?
  • 基于组件的设计工作流与界面抽象
  • 离散点最小(凸)包围边界查找
  • 聊聊sentinel的DegradeSlot
  • 前端面试之闭包
  • 树莓派 - 使用须知
  • 算法-插入排序
  • 小试R空间处理新库sf
  • ionic入门之数据绑定显示-1
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • ​Java并发新构件之Exchanger
  • ​力扣解法汇总946-验证栈序列
  • ​香农与信息论三大定律
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (十五)使用Nexus创建Maven私服
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • ./configure,make,make install的作用(转)
  • .NET Core 项目指定SDK版本
  • .Net CoreRabbitMQ消息存储可靠机制
  • .NET业务框架的构建
  • @html.ActionLink的几种参数格式
  • @RequestParam详解
  • [ web基础篇 ] Burp Suite 爆破 Basic 认证密码
  • [20180129]bash显示path环境变量.txt
  • [ARC066F]Contest with Drinks Hard
  • [AutoSar]工程中的cpuload陷阱(三)测试