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();
    }
    */
}
相关文章
|
16天前
|
Java Spring 容器
如何解决spring EL注解@Value获取值为null的问题
本文探讨了在使用Spring框架时,如何避免`@Value(&quot;${xxx.xxx}&quot;)`注解导致值为null的问题。通过具体示例分析了几种常见错误场景,包括类未交给Spring管理、字段被`static`或`final`修饰以及通过`new`而非依赖注入创建对象等,提出了相应的解决方案,并强调了理解框架原理的重要性。
56 4
|
10天前
|
人工智能 自然语言处理 前端开发
SpringBoot + 通义千问 + 自定义React组件:支持EventStream数据解析的技术实践
【10月更文挑战第7天】在现代Web开发中,集成多种技术栈以实现复杂的功能需求已成为常态。本文将详细介绍如何使用SpringBoot作为后端框架,结合阿里巴巴的通义千问(一个强大的自然语言处理服务),并通过自定义React组件来支持服务器发送事件(SSE, Server-Sent Events)的EventStream数据解析。这一组合不仅能够实现高效的实时通信,还能利用AI技术提升用户体验。
55 2
|
13天前
|
XML Java 数据格式
Spring从入门到入土(bean的一些子标签及注解的使用)
本文详细介绍了Spring框架中Bean的创建和使用,包括使用XML配置文件中的标签和注解来创建和管理Bean,以及如何通过构造器、Setter方法和属性注入来配置Bean。
50 9
Spring从入门到入土(bean的一些子标签及注解的使用)
|
10天前
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
22 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
|
5天前
|
架构师 Java 开发者
得物面试:Springboot自动装配机制是什么?如何控制一个bean 是否加载,使用什么注解?
在40岁老架构师尼恩的读者交流群中,近期多位读者成功获得了知名互联网企业的面试机会,如得物、阿里、滴滴等。然而,面对“Spring Boot自动装配机制”等核心面试题,部分读者因准备不足而未能顺利通过。为此,尼恩团队将系统化梳理和总结这一主题,帮助大家全面提升技术水平,让面试官“爱到不能自已”。
得物面试:Springboot自动装配机制是什么?如何控制一个bean 是否加载,使用什么注解?
|
12天前
|
easyexcel Java UED
SpringBoot中大量数据导出方案:使用EasyExcel并行导出多个excel文件并压缩zip后下载
在SpringBoot环境中,为了优化大量数据的Excel导出体验,可采用异步方式处理。具体做法是将数据拆分后利用`CompletableFuture`与`ThreadPoolTaskExecutor`并行导出,并使用EasyExcel生成多个Excel文件,最终将其压缩成ZIP文件供下载。此方案提升了导出效率,改善了用户体验。代码示例展示了如何实现这一过程,包括多线程处理、模板导出及资源清理等关键步骤。
|
9天前
|
XML Java 数据库
Spring boot的最全注解
Spring boot的最全注解
|
11天前
|
JSON NoSQL Java
springBoot:jwt&redis&文件操作&常见请求错误代码&参数注解 (九)
该文档涵盖JWT(JSON Web Token)的组成、依赖、工具类创建及拦截器配置,并介绍了Redis的依赖配置与文件操作相关功能,包括文件上传、下载、删除及批量删除的方法。同时,文档还列举了常见的HTTP请求错误代码及其含义,并详细解释了@RequestParam与@PathVariable等参数注解的区别与用法。
|
10天前
|
Web App开发 JavaScript Java
elasticsearch学习五:springboot整合 rest 操作elasticsearch的 实际案例操作,编写搜索的前后端,爬取京东数据到elasticsearch中。
这篇文章是关于如何使用Spring Boot整合Elasticsearch,并通过REST客户端操作Elasticsearch,实现一个简单的搜索前后端,以及如何爬取京东数据到Elasticsearch的案例教程。
103 0
elasticsearch学习五:springboot整合 rest 操作elasticsearch的 实际案例操作,编写搜索的前后端,爬取京东数据到elasticsearch中。
|
11天前
|
Java API Spring
springBoot:注解&封装类&异常类&登录实现类 (八)
本文介绍了Spring Boot项目中的一些关键代码片段,包括使用`@PathVariable`绑定路径参数、创建封装类Result和异常处理类GlobalException、定义常量接口Constants、自定义异常ServiceException以及实现用户登录功能。通过这些代码,展示了如何构建RESTful API,处理请求参数,统一返回结果格式,以及全局异常处理等核心功能。