Springboot注入数据的几个注解

简介: 本篇文章主要讲述了@Value,@ConfigurationProperties,@ImportResource以及@Configuration等注解的使用


@Value

@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Value {
    String value();
}


我们来看一下,从注解本身的定义,该注解可以使用在以下方面

  1. 字段上
  2. set方法上
  3. 方法入参上
  4. 当作元注解


功能


1.可以注入普通的字符串

@Value("normal")
private String normal;


2.可以使用SpEl表达式
a. 获取系统属性

 @Value("#{systemProperties['java.version']}")
 private String systemPropertiesName; // 注入操作系统属性


b.调用方法

 @Value("#{T(java.lang.Math).random()*80}")//获取随机数
 private double randomNumber; //注入表达式结果


c.计算

@Value("#{1+2}")
private double sum; //注入表达式结果 1+2的求和


3.注入Resource

 @Value("classpath:os.yaml")
 private Resource resourceFile; // 注入文件资源


4.注入URL资源

@Value("http://www.baidu.com")
private Resource testUrl; // 注入URL资源


5.获取配置文件属性

 @Value("${app.name}")
 private String appName; // 这里的值来自application.properties,spring boot启动时默认加载此文件




{}与${}

1. #{}


通常用来获取bean的属性,或者调用bean的某个方法。当然还有可以表示常量



2. ${}


一般用于读取配置文件中的内容
如果内容找不到,启动会失败。
如果说希望配置文件没有配置的情况下也能正常启动,需要在里面加上默认值

@Value("${app.name:测试}")
private String name;


3.混合使用

那么#{}与${}是否可以混合着使用呢,答案是可以<br />a. #{}在外  ${}在内

// SpEL: 传入一个字符串,根据","切分后插入列表中, #{}和${}配置使用
@Value("#{'${server.name}'.split(',')}")
private List<String> servers;


这时会先读取配置文件中的server.name的属性,然后通过SpEl表达式去执行split方法将逗号分隔的字符串转换为字符串的列表
b.${}在外,#{}在内


@Value("${server.#{1+2}")
private List<String> servers2;


这样写去获取配置文件中server.3的值可行吗,不可以
因为在spring的加载机制中是先执行${}然后再去执行#{}
所以这样写就会去配置文件中找server.#{1+2}这个属性的值,因为配置文件中没有,启动就会报错

4.总结

#{} 用于执行SpEl表达式,并将内容赋值给属性
${} 主要用于加载外部属性文件中的值
#{} 在外,${}在里






@ConfigurationProperties


@ConfigurationProperties是Spring Boot提供的。包括@EnableConfigurationProperties也是Spring Boot才有的。它在自动化配置中起到了非常关键的作用
ConfigurationPropertiesBindingPostProcessor会对标注@ConfigurationProperties注解的Bean进行属性值的配置。



我们在配置文件中增加一下列

com.example.demo.age=11
com.example.demo.address[0]=北京  
com.example.demo.name=test


读取方式
a.

@Component
@ConfigurationProperties(prefix = "com.example.demo")
public class People {

    private String name;
    private Integer age;
    private List<String> address;
}

b.在方法上使用bean和ConfigurationProperties注解

    @Bean
    @ConfigurationProperties(prefix = "com.example.demo")
    public People people() {
        return new People();
    }




@ImportResource


@ImportResource注解用于导入Spring的配置文件,让配置文件里面的内容生效;(就是以前写的springmvc.xml、applicationContext.xml)
Spring Boot里面没有Spring的配置文件,我们自己编写的配置文件,也不能自动识别;
想让Spring的配置文件生效,需要使用@ImportResource加载进来

@ImportResource(locations = {"classpath:beans.xml"})


@Configuration


指明当前类是一个配置类;就是来替代之前的Spring一些繁琐的配置文件

  • 配置类@Configuration作用于类上,相当于一个xml配置文件
  • 使用@Bean给容器中添加组件,作用于方法上

@Configuration
public class MyAppConfig {

    //将方法的返回值添加到容器中;容器中这个组件默认的id就是方法名
    @Bean
    public HelloService helloService02(){
        System.out.println("配置类@Bean给容器中添加组件了...");
        return new HelloService();
    }
}


这样写实质上就相当于在xml中进行bean的配置

<bean id="helloService" class="com.self.springboot.service.HelloService"></bean>

如果有很多bean需要注入,又不想这么麻烦去做,就使用扫描的方式实现

//通过该注解来表明该类是一个Spring的配置,相当于一个传统的ApplicationContext.xml
@Configuration
//相当于配置文件里面的<context:component-scan/>标签,扫描这些包下面的类的注解
@ComponentScan(basePackages="com.self.dao,com.hanpang.service")
public class SpringConfig {
    // 通过该注解来表明是一个Bean对象,相当于xml中的<bean>
    //bean的id值默认是方法名userDao
    /*
    @Bean
    public HelloService helloService02(){
        System.out.println("配置类@Bean给容器中添加组件了...");
        return new HelloService();
    }
    */
}
相关文章
|
2月前
|
XML Java 数据格式
SpringBoot入门(8) - 开发中还有哪些常用注解
SpringBoot入门(8) - 开发中还有哪些常用注解
60 0
|
21天前
|
Java Spring
【Spring】方法注解@Bean,配置类扫描路径
@Bean方法注解,如何在同一个类下面定义多个Bean对象,配置扫描路径
159 73
|
16天前
|
Java Spring 容器
【SpringFramework】Spring IoC-基于注解的实现
本文主要记录基于Spring注解实现IoC容器和DI相关知识。
48 21
|
1天前
|
前端开发 Java API
SpringBoot整合Flowable【06】- 查询历史数据
本文介绍了Flowable工作流引擎中历史数据的查询与管理。首先回顾了流程变量的应用场景及其局限性,引出表单在灵活定制流程中的重要性。接着详细讲解了如何通过Flowable的历史服务API查询用户的历史绩效数据,包括启动流程、执行任务和查询历史记录的具体步骤,并展示了如何将查询结果封装为更易理解的对象返回。最后总结了Flowable提供的丰富API及其灵活性,为后续学习驳回功能做了铺垫。
8 0
SpringBoot整合Flowable【06】- 查询历史数据
|
21天前
|
存储 Java Spring
【Spring】获取Bean对象需要哪些注解
@Conntroller,@Service,@Repository,@Component,@Configuration,关于Bean对象的五个常用注解
|
21天前
|
Java Spring
【Spring配置】idea编码格式导致注解汉字无法保存
问题一:对于同一个项目,我们在使用idea的过程中,使用汉字注解完后,再打开该项目,汉字变成乱码问题二:本来a项目中,汉字注解调试好了,没有乱码了,但是创建出来的新的项目,写的注解又成乱码了。
|
1天前
|
存储 前端开发 Java
SpringBoot整合Flowable【05】- 使用流程变量传递业务数据
本文介绍了如何使用Flowable的流程变量来管理绩效流程中的自定义数据。首先回顾了之前的简单绩效流程,指出现有流程缺乏分数输入和保存步骤。接着详细解释了流程变量的定义、分类(运行时变量和历史变量)及类型。通过具体代码示例展示了如何在绩效流程中插入全局和局部流程变量,实现各节点打分并维护分数的功能。最后总结了流程变量的使用场景及其在实际业务中的灵活性,并承诺将持续更新Flowable系列文章,帮助读者更好地理解和应用Flowable。 简要来说,本文通过实例讲解了如何利用Flowable的流程变量功能优化绩效评估流程,确保每个环节都能记录和更新分数,同时提供了全局和局部变量的对比和使用方法。
10 0
|
2月前
|
XML JSON Java
SpringBoot必须掌握的常用注解!
SpringBoot必须掌握的常用注解!
88 4
SpringBoot必须掌握的常用注解!
|
2月前
|
前端开发 Java Spring
Spring MVC核心:深入理解@RequestMapping注解
在Spring MVC框架中,`@RequestMapping`注解是实现请求映射的核心,它将HTTP请求映射到控制器的处理方法上。本文将深入探讨`@RequestMapping`注解的各个方面,包括其注解的使用方法、如何与Spring MVC的其他组件协同工作,以及在实际开发中的应用案例。
50 4
|
2月前
|
前端开发 Java 开发者
Spring MVC中的请求映射:@RequestMapping注解深度解析
在Spring MVC框架中,`@RequestMapping`注解是实现请求映射的关键,它将HTTP请求映射到相应的处理器方法上。本文将深入探讨`@RequestMapping`注解的工作原理、使用方法以及最佳实践,为开发者提供一份详尽的技术干货。
171 2