【Spring实战】29 @Value 注解

文章目录

    • 1. 定义
    • 2. 好处
    • 3. 示例
      • 1)注入基本类型
      • 2)注入集合类型
      • 3)使用默认值
      • 4)注入整数和其他类型
    • 总结

在实际的应用中,我们经常需要从外部配置文件或其他配置源中获取参数值。Spring 框架提供了 @Value 注解,它是一个强大的工具,让我们能够轻松地将配置值注入到 Spring Bean 中

1. 定义

@Value 注解是 Spring 框架中的一个注解,它用于从属性文件、环境变量或其他配置源中注入值到类的字段或方法参数中。

2. 好处

  • 外部配置:

    允许在应用程序的外部配置文件中设置参数值,而不是硬编码在代码中

  • 灵活性:

    可以根据环境或部署配置动态调整参数值,而不需要修改代码

  • 简化配置:

    简化了配置文件的读取和属性注入的操作

3. 示例

1)注入基本类型

DemoComponent.java

package com.cheney.demo;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class DemoComponent {

    @Value("${demo.name}")
    private String name;

    public void print() {
        System.out.println("名字是: " + name);
    }
}

上述代码中,${demo.name} 表示从配置文件中读取 demo.name 的值,并将其注入到 name 字段中

DemoApplication.java

package com.cheney.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        ApplicationContext context = SpringApplication.run(DemoApplication.class, args);
        context.getBean(DemoComponent.class).print();
    }
}

application.properties

demo.name=cheney

执行结果

【Spring实战】29 @Value 注解_第1张图片

2)注入集合类型

DemoComponent.java

package com.cheney.demo;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.util.List;

@Component
public class DemoComponent {

    @Value("${demo.language}")
    private List<String> languageList;

    public void print() {
        System.out.println("语言是: " + languageList);
    }
}

在配置文件中,demo.language 可以设置为类似 Java,Python 的值,@Value 注解将其自动转换为List

DemoApplication.java

package com.cheney.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        ApplicationContext context = SpringApplication.run(DemoApplication.class, args);
        context.getBean(DemoComponent.class).print();
    }
}

application.properties

demo.language=Java,Python

执行结果

【Spring实战】29 @Value 注解_第2张图片

3)使用默认值

DemoComponent.java

package com.cheney.demo;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class DemoComponent {

    @Value("${demo.name:hello}")
    private String name;

    public void print() {
        System.out.println("名字是: " + name);
    }
}

在这个例子中,如果配置文件中没有定义 demo.name,则会使用默认值 hello

DemoApplication.java

package com.cheney.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        ApplicationContext context = SpringApplication.run(DemoApplication.class, args);
        context.getBean(DemoComponent.class).print();
    }
}

application.properties

#demo.name=cheney

执行结果

【Spring实战】29 @Value 注解_第3张图片

4)注入整数和其他类型

DemoComponent.java

package com.cheney.demo;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class DemoComponent {

    @Value("${demo.age}")
    private int age;

    public void print() {
        System.out.println("年龄是: " + age);
    }
}

@Value 注解也支持注入其他基本类型,如整数、布尔值等。

DemoApplication.java

package com.cheney.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        ApplicationContext context = SpringApplication.run(DemoApplication.class, args);
        context.getBean(DemoComponent.class).print();
    }
}

application.properties

demo.age=22

执行结果

【Spring实战】29 @Value 注解_第4张图片

总结

通过 @Value 注解,Spring 提供了一种简单而强大的方式,将外部配置值注入到应用程序中。这样的灵活性使得我们能够更好地适应不同的环境和需求,而不需要修改源代码,详细的注解使用说明请查阅官方文档。

你可能感兴趣的:(Spring实战,spring,java,后端)