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

目录
  • 属性赋值
  • @Value注解的定义:
  • 测试
    • 1.在添加了Spring依赖的Maven项目中创建
    • 2.在resources目录下创建一个配置文件person.properties
    • 3.创建配置类
    • 4.创建测试类进行测试
    • 5.测试结果:
  • 如何给Bean的属性赋值(注入)
    • 1.通过构造方法设置值。
    • 2.设置注入(通过set方法)

属性赋值

只用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方法将值注入)

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

(0)

相关推荐

  • 基于Spring boot @Value 注解注入属性值的操作方法

    本文主要介绍Spring @Value 注解注入属性值的使用方法的分析,文章通过示例代码非常详细地介绍,对于每个人的学习或工作都有一定的参考学习价值 在使用spring框架的项目中,@Value是经常使用的注解之一.其功能是将与配置文件中的键对应的值分配给其带注解的属性.在日常使用中,我们常用的功能相对简单.本文使您系统地了解@Value的用法. @Value注入形式 根据注入的内容来源,@ Value属性注入功能可以分为两种:通过配置文件进行属性注入和通过非配置文件进行属性注入. 非配置文件注

  • Spring@Value属性注入使用方法解析

    这篇文章主要介绍了Spring@Value属性注入使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在使用Spring框架的项目中,@Value是使用比较频繁的注解之一,它的作用是将配置文件中key对应的值赋值给它标注的属性.在日常使用中我们常用的功能都比较简单,本篇文章系统的带大家来了解一下@Value的使用方法. @Value注入支持形式 @Value属性注入功能根据注入的内容来源可分为两类:通过配置文件的属性注入和通过非配置文件

  • Spring中利用配置文件和@value注入属性值代码详解

    1 简单属性值注入 package com.xy.test1; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @Service // 需要被注入属性值的类需要被Spring管理 public class PropertiesService1 { // 利用@Value注解,即使没有该属性或者属性文件也不会报错 // @Value输入

  • SpringBoot 使用 @Value 注解读取配置文件给静态变量赋值

    1.application.properties 配置文件 mail.username=xue@163.com mail.password=xue mail.host=smtp.163.com mail.smtp.auth=true 2.给普通变量赋值,直接在变量上添加 @Value 注解 import org.springframework.beans.factory.annotation.Value; public class MailConfig { @Value("${mail.user

  • Spring通过配置文件和注解实现属性赋值

    前言 在实际开发当中,Spring中bean的属性直接赋值用的不是太多,整理这方面的资料,做一个小结,以备后续更深入的学习. 通过配置文件的方式 以配置文件的方式启动spring容器时,可以使用property标签的value给bean的属性赋值,赋值的形式有以下几种: <--通过context:property-placeholder将properties文件中的值加载的环境变量中(properties中的属性值最终是以环境变量的形式存储的)> <context:property-pl

  • Spring注解驱动开发实现属性赋值

    前言 在实际开发当中,Spring中bean的属性直接赋值用的不是太多,整理这方面的资料,做一个小结,以备后续更深入的学习. 通过配置文件的方式 以配置文件的方式启动spring容器时,可以使用property标签的value给bean的属性赋值,赋值的形式有以下几种: <--通过context:property-placeholder将properties文件中的值加载的环境变量中(properties中的属性值最终是以环境变量的形式存储的)> <context:property-pl

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

    目录 属性赋值 @Value注解的定义: 测试 1.在添加了Spring依赖的Maven项目中创建 2.在resources目录下创建一个配置文件person.properties 3.创建配置类 4.创建测试类进行测试 5.测试结果: 如何给Bean的属性赋值(注入) 1.通过构造方法设置值. 2.设置注入(通过set方法) 属性赋值 只用Spring注解开发的时候,可以使用@Value搭配@PropertySource注解进行给Bean的属性进行赋值. @Value @Value注解的定义:

  • Spring 中 @Service 和 @Resource 注解的区别

    Spring 中 @Service 和 @Resource 注解的区别 1 前言 在咱们使用 spring 框架的时候,注解是"不可或缺"的一部分,她帮我们脱离了配置繁琐的 XML 文件的工作,但有一点却需要我们自己去把握,那就是"3何",即"何时何地用何注解?"在本篇博文中,作者就简单介绍一下如何恰当的使用 @Service 和 @Resource 这两个注解. 2 注解 2.1 @Service 当咱们需要定义某个类为一个 bean 的时候,

  • 详解Spring中@Valid和@Validated注解用法

    目录 案例引入 @Valid 详解 @Validated 详解 @Valid 和 @Validated 比较 案例引入 下面我们以新增一个员工为功能切入点,以常规写法为背景,慢慢烘托出 @Valid 和 @Validated 注解用法详解. 那么,首先,我们会有一个员工对象 Employee,如下 : /** * 员工对象 * * @author sunnyzyq * @since 2019/12/13 */ public class Employee { /** 姓名 */ public St

  • 详解Spring注解驱动开发之属性赋值

    一.@Value注解 在Person的属性上使用@Value注解指定注入值 public class Person { @Value("#{20-2}") //SpEL表达式 #{} private Integer id; @Value("张三") //基本数据类型 private String name; } 配置类 @Configuration public class MainConfigOfPropertyValues { @Bean public Pers

  • 关于Spring Bean实例过程中使用反射和递归处理的Bean属性填充问题

    一.前言 超卖.掉单.幂等,你的程序总是不抗揍! 想想,运营已经对外宣传了七八天的活动,满心欢喜的等着最后一天页面上线对外了,突然出现了一堆异常.资损.闪退,而用户流量稍纵即逝,最后想死的心都有! 就编程开发来讲,丢三落四.乱码七糟,可能这就是大部分初级程序员日常开发的真实写照,在即使有测试人员验证的情况下,也会出现带Bug上线的现象,只不过是当时没有发现而已!因为是人写代码,就一定会有错误,即使是老码农 就程序Bug来讲,会包括产品PRD流程上的Bug.运营配置活动时候的Bug.研发开发时功能

  • Spring中@Autowired和@Qualifier注解的3个知识点小结

    目录 @Autowired和@Qualifier注解的3个知识点 1.@Autowired自动注入 2.如果想直接使用byName的注入方式 3.如果没有指定Spring创建的bean的名称 @Autowired @Qualifier @Resource的区别 1.@Autowired 2.@Qualifier 3.@Resource @Autowired和@Qualifier注解的3个知识点 1.@Autowired自动注入 默认是先以byType的方式,如果有多个类型相匹配,那么使用byNa

  • Spring中基于Java的配置@Configuration和@Bean用法详解

    一.首先,需要xml中进行少量的配置来启动Java配置: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://ww

  • Spring中@Configuration注解修改的类生成代理原因解析

    目录 前言 说明 场景 处理分析 总结 前言 在Spring中只要被@Configuration注解修饰的类,Spring就会为其生成代理对象,至于这样做的主要原因就是为了解决生成对象的单例问题. 说明 实际上作者在ConfigurationClassEnhancer这个类也有注解说明 场景 如果Spring不做处理,下面输出的一定的是false,但是实际上输出的结果是true,那么只有可能是代理类做了特殊处理. @Configuration public class MyConfigurati

  • 详析Spring中依赖注入的三种方式

    前言 平常的java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提出了依赖注入的思想,即依赖类不由程序员实例化,而是通过spring容器帮我们new指定实例并且将实例注入到需要该对象的类中.依赖注入的另一种说法是"控制反转",通俗的理解是:平常我们new一个实例,这个实例的控制权是我们程序员,而控制反转是指new实例工作不由我们程序员来做而是交给spring容器来做. 在Sprin

随机推荐