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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用版 2核4GB 50GB
简介: 利用注解将外部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'}
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1天前
|
前端开发 Java Spring
蓝易云 - 详解SpringBoot的常用注解
以上就是SpringBoot中常用的一些注解,正确理解和使用这些注解,可以帮助我们更好地使用SpringBoot框架进行开发。
7 0
|
2天前
|
Java Spring 容器
Spring5系列学习文章分享---第六篇(框架新功能系列+整合日志+ @Nullable注解 + JUnit5整合)
Spring5系列学习文章分享---第六篇(框架新功能系列+整合日志+ @Nullable注解 + JUnit5整合)
5 0
|
2天前
|
XML Java 数据库
Spring5系列学习文章分享---第五篇(事务概念+特性+案例+注解声明式事务管理+参数详解 )
Spring5系列学习文章分享---第五篇(事务概念+特性+案例+注解声明式事务管理+参数详解 )
6 0
|
2天前
|
XML Java 数据格式
Spring5系列学习文章分享---第三篇(AOP概念+原理+动态代理+术语+Aspect+操作案例(注解与配置方式))
Spring5系列学习文章分享---第三篇(AOP概念+原理+动态代理+术语+Aspect+操作案例(注解与配置方式))
5 0
|
2天前
|
XML druid Java
Spring5系列学习文章分享---第二篇(IOC的bean管理factory+Bean作用域与生命周期+自动装配+基于注解管理+外部属性管理之druid)
Spring5系列学习文章分享---第二篇(IOC的bean管理factory+Bean作用域与生命周期+自动装配+基于注解管理+外部属性管理之druid)
6 0
|
Java Spring
Spring(08)——方法注入之替换方法实现
8方法注入之替换方法实现 Spring提供了一种替换方法实现的机制,可以让我们改变某个bean某方法的实现。打个比方我们有一个bean,其中拥有一个add()方法可以用来计算两个整数的和,但这个时候我们想把它的实现逻辑改为如果两个整数的值相同则把它们相乘,否则还是把它们相加,在不改变或者是不能改变源码的情况下我们就可以通过Spring提供的替换方法实现机制来实现这一要求。
820 0
|
6天前
|
Java
springboot自定义拦截器,校验token
springboot自定义拦截器,校验token
20 6
|
4天前
|
Java 数据库连接 数据库
Spring Boot 集成 MyBatis-Plus 总结
Spring Boot 集成 MyBatis-Plus 总结
|
3天前
|
NoSQL 搜索推荐 Java
使用Spring Boot实现与Neo4j图数据库的集成
使用Spring Boot实现与Neo4j图数据库的集成
|
6天前
|
Java 关系型数据库 MySQL
Mybatis入门之在基于Springboot的框架下拿到MySQL中数据
Mybatis入门之在基于Springboot的框架下拿到MySQL中数据
15 4