Spring基础篇:利用注解将外部Properties属性注入到Bean中的方法

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 利用注解将外部Properties属性注入到Bean中的方法

例子

通过data.properties给类DataSource.class的属性注入相应的值。

$DataSource.class$

public class DataSource {
    private String driverClassName;
    private String url;
    private String username;
    private String password;
}

$data.properties$

driverClassName=com.mysql.cj.jdbc.Driver
url:jdbc:mysql://localhost:3306/Kaven?useUnicode=true&characterEncoding=UTF-8
dataUsername=root
password=root

文件组织位置 注意*

properties文件放在resources目录下。

通过注解的方式

1.在Bean上加入@Compoent注解

@Component
public class DataSource {
    private String driverClassName;
    private String url;
    private String username;
    private String password;
}

使DataSource类被Spring容器管理,但目前缺少配置类,所以还不能将该类注册到容器中,现在我们来配置一下配置类

2.定义配置类

将配置类取名为:PropertiesAnnotationConfig,作为配置类,它有两个核心动作:

  1. 添加@Configuration注解,表示该类是Spring容器的配置类。
  2. 添加@ComponentScan注解,使用其一的方法:扫描某个包及其自包下,带有@Component或泛化注解的Bean注册到容器中。
@Configuration
@ComponentScan("juejin.properties")
public class PropertiesAnnotationConfig {
}

3.在配置类中使用@PropertySource注解 解析properties

@PropertySource("juejin/properties/data.properties")

其中juejin/properties/dataproperties对应的路径如下:

image.png

4.在Bean上使用@value注入属性

@Value("${driverClassName}")
private String driverClassName;
@Value("${url}")
private String url;
@Value("${dataUsername}")
private String username;
@Value("${password}")
private String password;

注解里面放上properties文件里面的键名就行

注意是使用这里先使用$符号。还有个#符号,将在后续介绍。

4.测试

这里我们通过AnnotationConfigApplicationContext类读取配置类,然后拿到Spring容器中的DataSourceBean,最后将其输出。

public class PropertiesAnnotationApplication {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(PropertiesAnnotationConfig.class);
        DataSource dataSource = ctx.getBean(DataSource.class);
        System.out.println(dataSource);
    }
}

5.结果

输出的结果,表明成功从外部文件中注入值到Bean中。

DataSource{driverClassName='com.mysql.cj.jdbc.Driver', url='jdbc:mysql://localhost:3306/Kaven?useUnicode=true&characterEncoding=UTF-8', username='root', password='root'}
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
16天前
|
Java Spring
一键注入 Spring 成员变量,顺序编程
介绍了一款针对Spring框架开发的插件,旨在解决开发中频繁滚动查找成员变量注入位置的问题。通过一键操作(如Ctrl+1),该插件可自动在类顶部添加`@Autowired`注解及其成员变量声明,同时保持光标位置不变,有效提升开发效率和代码编写流畅度。适用于IntelliJ IDEA 2023及以上版本。
一键注入 Spring 成员变量,顺序编程
|
22小时前
|
Java Spring
【Spring配置】创建yml文件和properties或yml文件没有绿叶
本文主要针对,一个项目中怎么创建yml和properties两种不同文件,进行配置,和启动类没有绿叶标识进行解决。
|
22小时前
|
Java Spring
【Spring】方法注解@Bean,配置类扫描路径
@Bean方法注解,如何在同一个类下面定义多个Bean对象,配置扫描路径
|
22小时前
|
存储 Java Spring
【Spring】获取Bean对象需要哪些注解
@Conntroller,@Service,@Repository,@Component,@Configuration,关于Bean对象的五个常用注解
|
22小时前
|
Java Spring
【Spring配置】idea编码格式导致注解汉字无法保存
问题一:对于同一个项目,我们在使用idea的过程中,使用汉字注解完后,再打开该项目,汉字变成乱码问题二:本来a项目中,汉字注解调试好了,没有乱码了,但是创建出来的新的项目,写的注解又成乱码了。
|
Java Spring 容器
Spring 源码解析 | populateBean 属性填充(上)
本文主要是讲 Spring 容器的启动过程主要是以题干的方式进行可能不回涉及过多的细节,希望大家阅读本文能对 Spring 源码有一个简单的了解。 环境介绍: Spring 5.3.10 Jdk 11
231 0
Spring 源码解析 | populateBean 属性填充(上)
|
Java Spring 容器
Spring 源码解析 | populateBean 属性填充(下)
本文主要是讲 Spring 容器的启动过程主要是以题干的方式进行可能不回涉及过多的细节,希望大家阅读本文能对 Spring 源码有一个简单的了解。 环境介绍: Spring 5.3.10 Jdk 11
184 0
|
Java 数据库连接 Spring
Spring 属性填充(下)
Spring 的属性填充主要是在 Bean 被创建后,通过 populateBean 方法来完成对象属性赋值以逐步完成 Bean 的初始化工作。
207 0
|
Java Spring
Spring 属性填充(上)
Spring 的属性填充主要是在 Bean 被创建后,通过 populateBean 方法来完成对象属性赋值以逐步完成 Bean 的初始化工作。
159 0