Spring源码从入门到精通---@Value赋值(十)

简介: Spring源码从入门到精通---@Value赋值(十)

上篇文章介绍了BeanPostProcessor,spring框架生命周期@PostConstruct,@PreDestroy,InitializingBean,disposableBean接口,依赖注入@Autowird都离不开这个接口,@Bean等对象的注入,在bean对象初始化前后还可以调用方法执行事务,对此接口源码也做了深入的了解,在对bean初始化之前,会调用方法先对bean注入属性赋值 ,感兴趣的可以点进去看看:


生命周期BeanPostProcessor(3)---Spring源码从入门到精通(九)


这篇文章主要介绍@Value如何获取值,先给大家贴上项目目录:

image.png

首先自定义application.properties放在classpath:/路径下,再自定义配置类,加上@Configuration,在加上@PropertiesSource注解指定配置文件,代码如下:

/**
 * 人
 *
 * @author keying
 * @date 2021/6/24
 */
public class Person {
    /**
     * @Value :1、普通赋值
     *          2、#{}计算复制
     *          3、&{}加载配置文件,也就是运行环境里面的值
     */
    @Value("张三")
    private String name;
    @Value("${value.name}")
    private String getProperties;
    @Value("#{100-50}")
    private Integer age;
    @Override
    public String toString() {
        return "Person{" +
            "name='" + name + '\'' +
            ", getProperties='" + getProperties + '\'' +
            ", age=" + age +
            '}';
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getGetProperties() {
        return getProperties;
    }
    public void setGetProperties(String getProperties) {
        this.getProperties = getProperties;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    public Person() {
    }
    public Person(String name, String getProperties, Integer age) {
        this.name = name;
        this.getProperties = getProperties;
        this.age = age;
    }
    public Person(String name, Integer age) {
        this.name = name;
        this.age = age;
    }
}
/**
 * 使用@PropertySource注解,读取外部配置文件,吧k/v保存到环境变量中
 * @author keying
 */
@Configuration
@PropertySource(value = {"classpath:/application.properties"})
public class MyConfigPropertyValues {
    @Bean("person")
    public Person person(){
        return new Person();
    }
}
/**
 * @author keying
 */
public class IOCTestPropertyValues {
    AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(
        MyConfigPropertyValues.class);
    @Test
    public void test1() {
        getBeanNames(applicationContext);
        Person person = (Person)applicationContext.getBean("person");
        System.out.println(person.toString());
        System.out.println("加载环境变量中的数据,配置文件的数据也会被@PropertySource注解加载进环境变量中");
        ConfigurableEnvironment configurableEnvironment = applicationContext.getEnvironment();
        String valueName = configurableEnvironment.getProperty("value.name");
        System.out.println("环境变量中的:" + valueName);
        applicationContext.close();
    }
    private void getBeanNames(AnnotationConfigApplicationContext applicationContext) {
        String[] names = applicationContext.getBeanDefinitionNames();
        for (String name : names) {
            System.out.println(name);
        }
    }
}

打印结果如下,从控制台我们可以看到,person组件的内容全部都获取到了,普通的@Value("张三")打印成功,@Value("&{value.name}")配置文件值获取成功,@Value("#{100-50}")spring表达式spEl获取的值获取成功:

image.png

相关文章
|
1月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
71 2
|
1月前
|
数据采集 监控 前端开发
二级公立医院绩效考核系统源码,B/S架构,前后端分别基于Spring Boot和Avue框架
医院绩效管理系统通过与HIS系统的无缝对接,实现数据网络化采集、评价结果透明化管理及奖金分配自动化生成。系统涵盖科室和个人绩效考核、医疗质量考核、数据采集、绩效工资核算、收支核算、工作量统计、单项奖惩等功能,提升绩效评估的全面性、准确性和公正性。技术栈采用B/S架构,前后端分别基于Spring Boot和Avue框架。
|
2月前
|
Java Spring
在使用Spring的`@Value`注解注入属性值时,有一些特殊字符需要注意
【10月更文挑战第9天】在使用Spring的`@Value`注解注入属性值时,需注意一些特殊字符的正确处理方法,包括空格、引号、反斜杠、新行、制表符、逗号、大括号、$、百分号及其他特殊字符。通过适当包裹或转义,确保这些字符能被正确解析和注入。
129 3
|
19天前
|
Java 开发者 微服务
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
38 6
Spring Boot 入门:简化 Java Web 开发的强大工具
|
16天前
|
存储 缓存 Java
Spring面试必问:手写Spring IoC 循环依赖底层源码剖析
在Spring框架中,IoC(Inversion of Control,控制反转)是一个核心概念,它允许容器管理对象的生命周期和依赖关系。然而,在实际应用中,我们可能会遇到对象间的循环依赖问题。本文将深入探讨Spring如何解决IoC中的循环依赖问题,并通过手写源码的方式,让你对其底层原理有一个全新的认识。
38 2
|
16天前
|
Java 数据库连接 数据库
从入门到精通---深入剖析Spring DAO
在Java企业级开发中,Spring框架以其强大的功能和灵活性,成为众多开发者的首选。Spring DAO(Data Access Object)作为Spring框架中处理数据访问的重要模块,对JDBC进行了抽象封装,极大地简化了数据访问异常的处理,并能统一管理JDBC事务。本文将从概述、功能点、背景、业务点、底层原理等多个方面深入剖析Spring DAO,并通过多个Java示例展示其应用实践,同时指出对应实践的优缺点。
21 1
|
20天前
|
监控 Java 数据安全/隐私保护
如何用Spring Boot实现拦截器:从入门到实践
如何用Spring Boot实现拦截器:从入门到实践
38 5
|
1月前
|
前端开发 Java 开发者
Spring生态学习路径与源码深度探讨
【11月更文挑战第13天】Spring框架作为Java企业级开发中的核心框架,其丰富的生态系统和强大的功能吸引了无数开发者的关注。学习Spring生态不仅仅是掌握Spring Framework本身,更需要深入理解其周边组件和工具,以及源码的底层实现逻辑。本文将从Spring生态的学习路径入手,详细探讨如何系统地学习Spring,并深入解析各个重点的底层实现逻辑。
63 9
|
7月前
|
Java 关系型数据库 数据库连接
Spring源码解析--深入Spring事务原理
本文将带领大家领略Spring事务的风采,Spring事务是我们在日常开发中经常会遇到的,也是各种大小面试中的高频题,希望通过本文,能让大家对Spring事务有个深入的了解,无论开发还是面试,都不会让Spring事务成为拦路虎。
104 1
|
2月前
|
Java Spring
Spring底层架构源码解析(三)
Spring底层架构源码解析(三)
146 5
下一篇
DataWorks