Spring中如何使用@Value注解实现给Bean属性赋值

 更新时间:2021年08月16日 11:30:36   作者:Code0cean  
这篇文章主要介绍了Spring中如何使用@Value注解实现给Bean属性赋值的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

属性赋值

只用Spring注解开发的时候,可以使用@Value搭配@PropertySource注解进行给Bean的属性进行赋值。

@Value

@Value注解的定义:

@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Value {
 /**
  * The actual value expression: for example {@code #{systemProperties.myProp}}.
  */
 String value();
}

可以看到@Value注解接受的参数只能是字符串,所以使用时参数都需要带上双引号。并且可以在属性,方法,参数等位置上标注。value属性支持以下三种类型:

基本数据类型,包括String,int,boolean等类型。

SpEL,#{}的形式即表示使用SpEL表达式,一般用于获取环境中其他bean的属性,当使用Elivis运算符“表达式1?:表达式2”,比如#{ “obj.property? :default_value” }形式时,这里的obj是取当前容器中的对象,default_value就是前面的值为空时的默认值。

在主配置类中通过@PropertySource注解加载配置文件,然后通过${ property : default_value}的形式取配置文件中的值,其中default_value表示前面的值为空时的默认值。

测试

1.在添加了Spring依赖的Maven项目中创建

以下两个实体类Student类和Teacher类

public class Teacher {
 public int id;
 public String name;
 
 public Teacher() {
  // TODO Auto-generated constructor stub
  System.out.println("teacher-----创建");
 }
 
 
 public Teacher(int id, String name) {
  super();
  this.id = id;
  this.name = name;
 } 
//省略getter和setter方法
}

在Student类中使用${}取配置文件的值,#{}取容器中的teacher对象的name属性

public class Student{
 
 @Value("1")
 private int id;
 @Value("${student.name}")
 private String name;
 @Value("${student.address:北京}")
 private String address;
 @Value("#{teacher.name?:'老子'}")
 private String teacherName;
 @Override
 public String toString() {
  return "Student [id=" + id + ", name=" + name + ", address=" + address + ", teacherName=" + teacherName + "]";
 }
//省略getter和setter方法
}

2.在resources目录下创建一个配置文件person.properties

添加以下值:

student.name=张三
person.address=广州市

3.创建配置类

使用@PropertySource注解读取外部配置文件person.properties中的key/value保存到运行的环境变量中。

@Configuration
@PropertySource("person.properties")
public class SpringConfig2 { 
    @Bean
 public Student student() {
  return new Student();  
 }
    @Bean
 public Teacher teacher() {
  return new Teacher(2,"老李");
 }
}

4.创建测试类进行测试

编写代码获取容器中的id为student的bean和直接获取配置环境的属性值。

public class IoCTest {
 @Test
 public void test() {
  //获取Spring的IOC容器
  AnnotationConfigApplicationContext applicationContext=new AnnotationConfigApplicationContext(SpringConfig2.class);
  //从容器中获取bean
       Student stu = (Student) applicationContext.getBean("student");
       System.out.println(stu);   
     //获取环境变量
  ConfigurableEnvironment environment = applicationContext.getEnvironment();
  String property = environment.getProperty("person.address");
  System.out.println(property);
  //关闭容器
  applicationContext.close();
 }
}

5.测试结果:

在这里插入图片描述

如何给Bean的属性赋值(注入)

1.通过构造方法设置值。

2.设置注入(通过set方法)

通过property标签(内部是通过调用类的set方法将值注入)

在这里插入图片描述

在这里插入图片描述

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 分析Netty直接内存原理及应用

    分析Netty直接内存原理及应用

    Netty作为一个流行的应用框架,它的强悍之处是性能强悍,可以轻松承载数万并发; 其编程模型简单,容易上手; 这就给大家打开了一扇通向高性能的大门。高效io模型略去不说,我们今天主要来看看内存控制这块的强大之处
    2021-06-06
  • spring集成okhttp3的步骤详解

    spring集成okhttp3的步骤详解

    okhttp是一个封装URL,比HttpClient更友好易用的工具,下面这篇文章主要给大家介绍了关于spring集成okhttp3的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2018-04-04
  • 浅谈Spring Boot 2.0迁移指南主要注意点

    浅谈Spring Boot 2.0迁移指南主要注意点

    Spring官方的Spring Boot 2变动指南,主要是帮助您将应用程序迁移到Spring Boot 2.0,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-10-10
  • SpringBoot特点之依赖管理和自动装配(实例代码)

    SpringBoot特点之依赖管理和自动装配(实例代码)

    在使用SpringBoot的时候,会自动将Bean装配到IoC容器中,操作也很简单,今天小编给大家介绍下SpringBoot特点之依赖管理和自动装配的知识,感兴趣的朋友一起看看吧
    2022-03-03
  • Java中ThreadLocal的一些理解

    Java中ThreadLocal的一些理解

    这篇文章主要介绍了Java中ThreadLocal的一些理解,帮助大家更好的理解和学习Java,感兴趣的朋友可以了解下
    2020-12-12
  • Spring Boot实现登录验证码功能的案例详解

    Spring Boot实现登录验证码功能的案例详解

    验证码的作用可以有效防止其他人对某一个特定的注册用户用特定的程序暴力破解方式进行不断的登录尝试,接下来通过本文给大家介绍Spring Boot实现登录验证码功能,需要的朋友可以参考下
    2022-08-08
  • Java你不了解的大数型BigInteger与BigDecimal类

    Java你不了解的大数型BigInteger与BigDecimal类

    这篇文章主要介绍了Java 处理超大数类型之BigInteger与BigDecimal案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2022-05-05
  • 详解java nio中的select和channel

    详解java nio中的select和channel

    这篇文章主要介绍了java nio中的select和channel
    2019-05-05
  • Java实现添加文字水印和图片水印功能

    Java实现添加文字水印和图片水印功能

    为图片添加水印是一种常用的图片处理技术,本文主要介绍了Java实现添加文字水印和图片水印功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • Spring Boot如何开启并使用邮件服务

    Spring Boot如何开启并使用邮件服务

    这篇文章主要介绍了Spring Boot如何开启并使用邮件服务,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06

最新评论