Spring中@Value注解的三种使用方式详解

 更新时间:2023年08月04日 10:45:17   作者:每天都要加油呀!  
这篇文章主要介绍了Spring中@Value注解的三种使用方式详解,文章通过示例代码非常详细地介绍,对于每个人的学习或工作都有一定的学习价值,需要的朋友可以参考下

@Value注解

@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

到此这篇关于Spring中@Value注解的三种使用方式详解的文章就介绍到这了,更多相关Spring中@Value注解内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java生成指定范围随机数的多种代码

    java生成指定范围随机数的多种代码

    今天在写代码的时候需要用到一个生成指定范围随机数的函数,百度了一下,发现了很多种方法,这里简单为大家整理一下,方便需要的朋友
    2017-08-08
  • SpringBoot中TransactionTemplate事务管理的实现

    SpringBoot中TransactionTemplate事务管理的实现

    Spring Boot提供了多种方式来管理事务,其中之一是使用TransactionTemplate,本文主要介绍了SpringBoot中TransactionTemplate事务管理的实现,具有一定的参考价值,感兴趣的可以了解一下
    2024-04-04
  • Java使用arthas修改日志级别详解

    Java使用arthas修改日志级别详解

    在我们线上环境中,一般不会开启debug级别的日志,为了提高性能 info和warning级别的日志也一般不会打印出来,那么如果遇到线上问题,除了使用arthas定位问题,想通过查询日志来实现问题定位,如何查看logger信息,更新logger level呢,下面我们来了解arthas修改日志级别
    2022-06-06
  • idea中引入了gb2312编码的文件的解决方法

    idea中引入了gb2312编码的文件的解决方法

    这篇文章主要介绍了idea中引入了gb2312编码的文件的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • Java内省之Introspector解读

    Java内省之Introspector解读

    这篇文章主要介绍了Java内省之Introspector解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • Java Spring-IOC容器与Bean管理之基于注解的方式案例详解

    Java Spring-IOC容器与Bean管理之基于注解的方式案例详解

    这篇文章主要介绍了Java Spring-IOC容器与Bean管理之基于注解的方式案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • resty upload无需依赖的文件上传与下载

    resty upload无需依赖的文件上传与下载

    这篇文章主要为大家介绍了resty upload中无需依赖的文件上传与下载过程,有需要的朋友可以借鉴参考下,希望能够有所帮助祝大家多多进步,早日升职加薪
    2022-03-03
  • Springboot整合kafka的示例代码

    Springboot整合kafka的示例代码

    这篇文章主要介绍了Springboot整合kafka的示例代码,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-02-02
  • Spring细数两种代理模式之静态代理和动态代理概念及使用

    Spring细数两种代理模式之静态代理和动态代理概念及使用

    代理是一种设计模式,提供了对目标对象另外的访问方式,即通过代理对象访问目标对象。可以不修改目标对象,对目标对象功能进行拓展。在我们学习Spring的时候就会发现,AOP(面向切面编程)的底层就是代理
    2023-02-02
  • Apache Arrow Parquet存储与使用

    Apache Arrow Parquet存储与使用

    这篇文章主要为大家介绍了Apache Arrow Parquet存储与使用原理详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08

最新评论