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();
}
AI 代码解读


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

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


功能


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

@Value("normal")
private String normal;
AI 代码解读


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

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


b.调用方法

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


c.计算

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


3.注入Resource

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


4.注入URL资源

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


5.获取配置文件属性

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




{}与${}

1. #{}


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



2. ${}


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

@Value("${app.name:测试}")
private String name;
AI 代码解读


3.混合使用

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

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


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


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


这样写去获取配置文件中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
AI 代码解读


读取方式
a.

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

    private String name;
    private Integer age;
    private List<String> address;
}
AI 代码解读

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

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




@ImportResource


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

@ImportResource(locations = {"classpath:beans.xml"})
AI 代码解读


@Configuration


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

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

@Configuration
public class MyAppConfig {

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


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

<bean id="helloService" class="com.self.springboot.service.HelloService"></bean>
AI 代码解读

如果有很多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();
    }
    */
}
AI 代码解读
目录
打赏
0
0
1
0
1
分享
相关文章
微服务——SpringBoot使用归纳——Spring Boot返回Json数据及数据封装——封装统一返回的数据结构
本文介绍了在Spring Boot中封装统一返回的数据结构的方法。通过定义一个泛型类`JsonResult&lt;T&gt;`,包含数据、状态码和提示信息三个属性,满足不同场景下的JSON返回需求。例如,无数据返回时可设置默认状态码&quot;0&quot;和消息&quot;操作成功!&quot;,有数据返回时也可自定义状态码和消息。同时,文章展示了如何在Controller中使用该结构,通过具体示例(如用户信息、列表和Map)说明其灵活性与便捷性。最后总结了Spring Boot中JSON数据返回的配置与实际项目中的应用技巧。
49 0
|
6天前
|
微服务——SpringBoot使用归纳——Spring Boot返回Json数据及数据封装——使用 fastJson 处理 null
本文介绍如何使用 fastJson 处理 null 值。与 Jackson 不同,fastJson 需要通过继承 `WebMvcConfigurationSupport` 类并覆盖 `configureMessageConverters` 方法来配置 null 值的处理方式。例如,可将 String 类型的 null 转为 &quot;&quot;,Number 类型的 null 转为 0,避免循环引用等。代码示例展示了具体实现步骤,包括引入相关依赖、设置序列化特性及解决中文乱码问题。
31 0
|
6天前
|
微服务——SpringBoot使用归纳——Spring Boot返回Json数据及数据封装——Spring Boot 默认对Json的处理
本文介绍了在Spring Boot中返回Json数据的方法及数据封装技巧。通过使用`@RestController`注解,可以轻松实现接口返回Json格式的数据,默认使用的Json解析框架是Jackson。文章详细讲解了如何处理不同数据类型(如类对象、List、Map)的Json转换,并提供了自定义配置以应对null值问题。此外,还对比了Jackson与阿里巴巴FastJson的特点,以及如何在项目中引入和配置FastJson,解决null值转换和中文乱码等问题。
32 0
Spring IOC—基于注解配置和管理Bean 万字详解(通俗易懂)
Spring 第三节 IOC——基于注解配置和管理Bean 万字详解!
163 26
SpringBoot整合Flowable【06】- 查询历史数据
本文介绍了Flowable工作流引擎中历史数据的查询与管理。首先回顾了流程变量的应用场景及其局限性,引出表单在灵活定制流程中的重要性。接着详细讲解了如何通过Flowable的历史服务API查询用户的历史绩效数据,包括启动流程、执行任务和查询历史记录的具体步骤,并展示了如何将查询结果封装为更易理解的对象返回。最后总结了Flowable提供的丰富API及其灵活性,为后续学习驳回功能做了铺垫。
123 0
SpringBoot整合Flowable【06】- 查询历史数据
SpringBoot缓存注解使用
Spring Boot 提供了一套方便的缓存注解,用于简化缓存管理。通过 `@Cacheable`、`@CachePut`、`@CacheEvict` 和 `@Caching` 等注解,开发者可以轻松地实现方法级别的缓存操作,从而提升应用的性能和响应速度。合理使用这些注解可以大大减少数据库的访问频率,优化系统性能。
214 89
Spring MVC常用的注解
@RequestMapping:用于处理请求 url 映射的注解,可用于类或方法上。用于类上,则表示类中 的所有响应请求的方法都是以该地址作为父路径。 @RequestBody:注解实现接收http请求的json数据,将json转换为java对象。 @ResponseBody:注解实现将conreoller方法返回对象转化为json对象响应给客户。 @Controller:控制器的注解,表示是表现层,不能用用别的注解代替 @RestController : 组合注解 @Conntroller + @ResponseBody @GetMapping , @PostMapping , @Put
Spring Boot的核心注解是哪个?他由哪几个注解组成的?
Spring Boot的核心注解是@SpringBootApplication , 他由几个注解组成 : ● @SpringBootConfiguration: 组合了- @Configuration注解,实现配置文件的功能; ● @EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项 ● @ComponentScan:Spring组件扫描
SpringBoot+@Async注解一起用,速度提升
本文介绍了异步调用在高并发Web应用性能优化中的重要性,对比了同步与异步调用的区别。同步调用按顺序执行,每一步需等待上一步完成;而异步调用无需等待,可提升效率。通过Spring Boot示例,使用@Async注解实现异步任务,并借助Future对象处理异步回调,有效减少程序运行时间。
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现

热门文章

最新文章