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

相关文章
|
2月前
|
人工智能 Java API
Spring AI 实战|Spring AI入门之DeepSeek调用
本文介绍了Spring AI框架如何帮助Java开发者轻松集成和使用大模型API。文章从Spring AI的初探开始,探讨了其核心能力及应用场景,包括手动与自动发起请求、流式响应实现打字机效果,以及兼容不同AI服务(如DeepSeek、通义千问)的方法。同时,还详细讲解了如何在生产环境中添加监控以优化性能和成本管理。通过Spring AI,开发者可以简化大模型调用流程,降低复杂度,为企业智能应用开发提供强大支持。最后,文章展望了Spring AI在未来AI时代的重要作用,鼓励开发者积极拥抱这一技术变革。
760 71
Spring AI 实战|Spring AI入门之DeepSeek调用
|
3月前
|
安全 Java 数据库
Spring Security 实战指南:从入门到精通
本文详细介绍了Spring Security在Java Web项目中的应用,涵盖登录、权限控制与安全防护等功能。通过Filter Chain过滤器链实现请求拦截与认证授权,核心组件包括AuthenticationProvider和UserDetailsService,负责用户信息加载与密码验证。文章还解析了项目结构,如SecurityConfig配置类、User实体类及自定义登录逻辑,并探讨了Method-Level Security、CSRF防护、Remember-Me等进阶功能。最后总结了Spring Security的核心机制与常见配置,帮助开发者构建健壮的安全系统。
197 0
|
3月前
|
前端开发 Java 物联网
智慧班牌源码,采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署
智慧班牌系统是一款基于信息化与物联网技术的校园管理工具,集成电子屏显示、人脸识别及数据交互功能,实现班级信息展示、智能考勤与家校互通。系统采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署与私有化定制。核心功能涵盖信息发布、考勤管理、教务处理及数据分析,助力校园文化建设与教学优化。其综合性和可扩展性有效打破数据孤岛,提升交互体验并降低管理成本,适用于日常教学、考试管理和应急场景,为智慧校园建设提供全面解决方案。
299 70
|
1月前
|
Java 关系型数据库 MySQL
【Spring】【事务】初学者直呼学会了的Spring事务入门
本文深入解析了Spring事务的核心概念与使用方法。Spring事务是一种数据库事务管理机制,通过确保操作的原子性、一致性、隔离性和持久性(ACID),维护数据完整性。文章详细讲解了声明式事务(@Transactional注解)和编程式事务(TransactionTemplate、PlatformTransactionManager)的区别与用法,并探讨了事务传播行为(如REQUIRED、REQUIRES_NEW等)及隔离级别(如READ_COMMITTED、REPEATABLE_READ)。
109 1
|
21天前
|
Java API 微服务
Java 21 与 Spring Boot 3.2 微服务开发从入门到精通实操指南
《Java 21与Spring Boot 3.2微服务开发实践》摘要: 本文基于Java 21和Spring Boot 3.2最新特性,通过完整代码示例展示了微服务开发全流程。主要内容包括:1) 使用Spring Initializr初始化项目,集成Web、JPA、H2等组件;2) 配置虚拟线程支持高并发;3) 采用记录类优化DTO设计;4) 实现JPA Repository与Stream API数据访问;5) 服务层整合虚拟线程异步处理和结构化并发;6) 构建RESTful API并使用Springdoc生成文档。文中特别演示了虚拟线程配置(@Async)和StructuredTaskSco
78 0
|
3月前
|
存储 安全 Java
Spring Security 入门与详解
Spring Security 是 Spring 框架中的核心安全模块,提供认证、授权及防护功能。本文详解其核心概念,包括认证(Authentication)、授权(Authorization)和过滤器链(Security Filter Chain)。同时,通过代码示例介绍基本配置,如 PasswordEncoder、UserDetailsService 和自定义登录页面等。最后总结常见问题与解决方法,助你快速掌握 Spring Security 的使用与优化。
494 0
|
4月前
|
存储 监控 数据可视化
SaaS云计算技术的智慧工地源码,基于Java+Spring Cloud框架开发
智慧工地源码基于微服务+Java+Spring Cloud +UniApp +MySql架构,利用传感器、监控摄像头、AI、大数据等技术,实现施工现场的实时监测、数据分析与智能决策。平台涵盖人员、车辆、视频监控、施工质量、设备、环境和能耗管理七大维度,提供可视化管理、智能化报警、移动智能办公及分布计算存储等功能,全面提升工地的安全性、效率和质量。
|
7月前
|
存储 安全 Java
Spring Security 入门
Spring Security 是 Spring 框架中的安全模块,提供强大的认证和授权功能,支持防止常见攻击(如 CSRF 和会话固定攻击)。它通过过滤器链拦截请求,核心概念包括认证、授权和自定义过滤器。配置方面,涉及密码加密、用户信息服务、认证提供者及过滤器链设置。示例代码展示了如何配置登录、注销、CSRF防护等。常见问题包括循环重定向、静态资源被拦截和登录失败未返回错误信息,解决方法需确保路径正确和添加错误提示逻辑。
396 2
Spring Security 入门
|
6月前
|
监控 JavaScript 数据可视化
建筑施工一体化信息管理平台源码,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
智慧工地云平台是专为建筑施工领域打造的一体化信息管理平台,利用大数据、云计算、物联网等技术,实现施工区域各系统数据汇总与可视化管理。平台涵盖人员、设备、物料、环境等关键因素的实时监控与数据分析,提供远程指挥、决策支持等功能,提升工作效率,促进产业信息化发展。系统由PC端、APP移动端及项目、监管、数据屏三大平台组成,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
230 7