Spring framework Day16:@PropertySource注解使用

news2024/11/25 12:32:45

前言

在开发应用程序过程中,经常需要使用外部的属性文件来配置应用程序的行为。Spring框架提供了@PropertySource注解,它可以方便地加载外部的属性文件,并将其中定义的属性值注入到Spring配置中。使用@PropertySource注解,我们可以灵活地管理和维护应用程序的配置信息,提高可维护性和灵活性。

本文将介绍@PropertySource注解的使用方法,以及如何将外部的属性文件加载到Spring配置中。我们将通过一个简单的示例来演示整个过程,并说明一些注意事项。

接下来,我们将详细介绍如何使用@PropertySource注解来加载外部属性文件。让我们开始吧!

一、开始学习

1、新建项目,结构如下

2、添加 spring 依赖 
 
    <!-- spring 的核心依赖 -->
    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.3.23</version>
        </dependency>
 
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.4.5</version>
        </dependency>

         <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.33</version>
        </dependency>
 
    </dependencies>
 3、 在 resources 下新建一个 db:properties 文件
url = jdbc:mysql://localhost:3306/psm
driver = com.mysql.cj.jdbc.Driver
name = root
password = 123456
4、在 config 包下新建一个 AppConfig 配置类
/**
 * @Date 2023-10-10
 * @Author qiu
 */
@Configuration
@PropertySource("classpath:db.properties")
@Slf4j
public class AppConfig {

    /**
     * 使用 @Value 注解结合 spel 表达式进行值注入,也就是将 properties
     * 文件中的属性值注入到当前的字段中
     */
    @Value("${driver}")
    private String driver;
    @Value("${url}")
    private String url;
    @Value("${name}")
    private String userName;
    @Value("${password}")
    private String password;

    @Bean
    public Connection connection() {
        log.info(driver);
        log.info(url);
        log.info(userName);
        log.info(password);

        try {
            return DriverManager.getConnection(url, userName, password);
        } catch (SQLException e) {
            throw new RuntimeException("Get connection error", e);
        }
    }

}

注意:  将 properties 文件的属性注入到配置类的字段中,由于 properties 文件是放在 resources 目录下, 因此编译之后会保存在 classpath 目录下,因此需要从 classpath 路径中查找资源文件

这段代码是一个配置类 AppConfig,用于将 properties 文件中的属性值注入到字段中,并创建一个数据库连接。

注解 @PropertySource("classpath:db.properties") 指定了 db.properties 文件位于 classpath 路径下,用于读取属性值。

通过 @Value 注解结合 SpEL 表达式,可以将 properties 文件中的属性值注入到对应的字段中。例如,@Value("${driver}") 表示将 db.properties 中的 driver 属性值注入到 driver 字段中。

connection() 方法中,通过 DriverManager.getConnection() 方法创建数据库连接,使用从 properties 文件中注入的属性值。

最后,使用日志打印了 driverurluserNamepassword 字段的值。

在配置类中使用到了两个注解:

  1. @PropertySource 注解用于指定属性文件的位置,并将其加载到 Spring 的环境中。它可以被用于类级别和方法级别。
  2. @Value 注解用于将属性值注入到类的字段或方法参数中。它可以用来获取属性文件中定义的属性值,也可以使用 SpEL 表达式进行动态赋值。

 5、测试
@Slf4j
public class Main {

    public static void main(String[] args) {
        ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
        Connection bean = context.getBean(Connection.class);
        Connection bean2 = context.getBean(Connection.class);
        log.info("con1:" + bean);
        log.info("con2:" + bean2);
    }

}

运行结果

 

二、使用 @PropertySource 和 @Value 注解的好处

 

使用@PropertySource@Value注解的主要好处在于可以统一管理应用程序中的属性值,并将其注入到类的字段或方法参数中,从而提高了应用程序的可配置性和可维护性。具体来说,有以下几点好处:

  1. 方便地读取属性文件中的属性值。 @PropertySource 注解可以将外部属性文件中的属性值加载到 Spring 应用程序上下文中,而 @Value 注解则可以方便地读取属性文件中的属性值,并将其注入到类的字段或方法参数中。这样,就不需要手动去读取属性文件,也不需要硬编码属性值,从而降低了代码的耦合度。

  2. 实现多环境配置。 在不同的环境中,可能需要设置不同的属性值,例如数据库连接地址等。通过在不同的环境中配置不同的属性文件,可以灵活地管理属性值,提高了应用程序的可配置性和可维护性。

  3. 提高代码的复用性。 配置类中的@Bean注解方法可以通过@Value注解获取属性值,并实现对组件的注入,从而使得组件可以被复用。

  4. 方便地进行测试。 由于通过属性注入的方式,相关的对象可以解耦合,因此便于进行单元测试。

总之,使用 @PropertySource@Value 注解可以方便地统一管理应用程序中的属性值,并将其注入到类的字段或方法参数中,从而提高了应用程序的可配置性和可维护性。

三、gitee 案例

案例完整地址:https://gitee.com/qiu-feng1/spring-framework.git

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1097663.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华为OD机试【优选核酸检测点】【2022.11 Q4 新题】

图片出自&#xff1a;华为机试真题 Java 实现【优选核酸检测点】【2022.11 Q4 新题】_寻找核酸检测点java_MISAYAONE的博客-CSDN博客 首先这是一道很恶心的题目。题目信息量大&#xff0c;逻辑分支多&#xff0c;还有各种细节上的坑。 本着死磕精神&#xff0c;耗时2h&#xf…

港联证券:四上市险企 前三季保费近1.8万亿

近日&#xff0c;跟着今年前9个月保费数据相继发表&#xff0c;各上市险企前三季度成果表现也得以一窥终究。数据闪现&#xff0c;我国人寿、我国人保、我国安全、众安在线4家上市险企共完结原保险保费收入&#xff08;下同&#xff09;1.78万亿元&#xff0c;同比添加6.09%。 …

预约按摩app软件开发定制足浴SPA上们服务小程序

同城按摩小程序是一种基于地理位置服务的小程序&#xff0c;它可以帮助用户快速找到附近的按摩师&#xff0c;并提供在线预约、评价、支付等功能。用户可以通过手机或者其他移动设备访问同城按摩小程序&#xff0c;实现足不出户就能预约到专业的按摩服务。 一、同城按摩小程序的…

2023年中国无创呼吸机产销量、竞争现状及行业市场规模分析[图]

医用呼吸机也被称之为机械通气&#xff0c;又能细分为无创机械通气&#xff08;NIV&#xff09;和有创机械通气&#xff08;IMV&#xff09;两种&#xff0c;即无创呼吸机和有创呼吸机。无创呼吸机又称气道正压通气呼吸机&#xff0c;它是一种以非创伤方式通过口鼻为使用者提供…

智能化安全巡更巡查系统—提升安全管理效率

传统的巡检都是手工完成&#xff0c;记录、拍照&#xff0c;回到办公室打印表单再交给作业队伍整改&#xff0c;再去现场核实复查&#xff0c;流程繁琐&#xff0c;效率低。而且大部分工地为了减少麻烦&#xff0c;人员往往都是口头沟通&#xff0c;存在很大质量风险&#xff0…

计网第六章(应用层)(四)(电子邮件)

目录 1、三个构成 2、基本过程 3、具体实现过程 4、 电子邮件 4.1 简单邮件传送协议SMTP 4.2电子邮件的信息格式 4.3多用途因特网邮件扩展MIME 4.4邮件读取协议 4.5基于万维网的电子邮件 电子邮件采用客户/服务器的方式。 1、三个构成 电子邮件系统的三个组成构件&a…

echarts 柱状折线图(折叠柱状图)月年汇总

echarts柱状折线图 前几项是按月计算&#xff0c;最后一列是年份这种情况如何实现呢&#xff1f; 如下图 或者 代码如下&#xff1a; 图一代码&#xff1a; <e-charts :option"option5" class"chart7"></e-charts>const option5 {tool…

Python数据分析实战-二维数组转一维数组的几种方法总结(附源码和实现效果)

实现功能 二维数组转一维数组的几种方法。 实现代码 import numpy as np# 二维数组 array_2d np.array([[1, 2, 3],[4, 5, 6],[7, 8, 9]])# 法1&#xff1a;将二维数组转换为一维数组 array_1d array_2d.flatten() print(法1&#xff1a;, array_1d)# 法2&#xff1a;将二…

揭秘成熟互联网团队:团队成员包括哪些岗位?

文章目录 &#x1f34a; 岗位&#x1f389; 1. 产品经理&#x1f389; 2. UI/UX设计师&#x1f389; 3. 前端工程师&#x1f389; 4. 后端工程师&#x1f389; 5. 数据分析师&#x1f389; 6. 运营专员&#x1f389; 7. 测试工程师&#x1f389; 8. 项目经理&#x1f389; 9. 运…

个人轻博客PHP开源系统/溯雪Sxlog轻博客源码/洁干净轻/占内存极低/php源码

源码简介&#xff1a; 溯雪(sxlog)它是一款很简洁越低内存的轻博客程序&#xff0c;整个程序包不到200KB&#xff0c;占内存极小&#xff0c;比一张照片都要小很多。简洁高效&#xff0c;占用空间内存极小&#xff0c;而且它不依赖任何数据库&#xff0c;不依赖富文本编辑器&a…

高效PPT制作与演示技巧大揭秘

PPT是职场必备技能&#xff0c;尤其在商务活动中&#xff0c;企业宣传、项目提案、路演宣讲……都需要用好PPT。然而&#xff0c;很多人的PPT效率低、效果差&#xff0c;客户不认可、老板不满意。 PPT不仅是办公软件&#xff0c;更是以汇报对象为中心、以共同的目标为导向、以…

Spring AOP归纳与总结

前言 AOP的核心思想是面向切面编程。AOP规范定义了多种概念&#xff0c;常用的aop框架有spring aop和AspectJ&#xff0c;两者功能和性能差异较大&#xff0c;现在默认的AOP框架是AspectJ&#xff0c;下面逐渐归纳其相关概念、功能及实现原理。 1. 概念 1. 切面&#xff1a;…

抖音直播招聘报白通过率是百分之99劳务公司报白有哪些好处?

首先抖音已经成为短视频流量最大的平台&#xff0c;抖音日活用户8亿&#xff0c;但是短视频招聘的企业不足300家&#xff0c;能直播招聘的不企业或者人力资源公司只有8000家&#xff0c;根据这些数据我们就能看到抖音招聘领域有巨大的空间&#xff0c;是以后的朝阳产业。 抖音…

网卡介绍篇

目录 1.什么是网卡&#xff1f; 2.网卡的演进 3.网卡的主要功能 4.服务器网卡介绍 5.服务器网卡的分类 6.网卡接口介绍 7.业界网卡主流厂商 8.SmartNIC概念介绍 9.SmartNIC产业发展趋势 10.SmartNIC实现 10-1.实现形式 10-2.SmartNIC不同实现技术对比 11.Mellanox…

Redis常见面试题总结

Redis(Remote Dictionary Server) 由Salvator Sanfilippo在2009年开源的使用 ANSI C 语言编写、高性能、遵守 BSD 协议、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库&#xff0c;并提供多种语言的 API 的非关系型数据库。 与传统数据库不同的是 Redis 的数据是存…

一百八十九、ClickHouse——在海豚调度器中执行ClickHouse建库建表语句

一、目的 由于Hive处理好的结果数据要同步到ClickHouse中&#xff0c;因此需要在在海豚调度器中执行ClickHouse的ADS层的建库建表语句 二、执行步骤 &#xff08;一&#xff09;情形一&#xff1a;ClickHouse和海豚在同一服务器上 1、直接在海豚中创建执行SQL文件脚本的工作…

ESD接地实时监控在工业生产中的作用是什么

ESD&#xff08;静电放电&#xff09;接地实时监控在工业生产中起着非常重要的作用。ESD是一种静电现象&#xff0c;它可能会在生产过程中对设备、产品和人员造成损害。ESD接地实时监控系统可以帮助生产企业及时检测并预防ESD事件&#xff0c;从而保护设备和产品的质量&#xf…

【编码魔法师系列_构建型2.1】单例模式「饿汉式」(Singleton Pattern)

学会设计模式&#xff0c;你就可以像拥有魔法一样&#xff0c;在开发过程中解决一些复杂的问题。设计模式是由经验丰富的开发者们&#xff08;GoF&#xff09;凝聚出来的最佳实践&#xff0c;可以提高代码的可读性、可维护性和可重用性&#xff0c;从而让我们的开发效率更高。通…

Java实现图片转文字!(OCR实现)

今天给大家分享一个Java实现OCR&#xff08;图片转文字&#xff09;的方法。 具体实现是把tess4j整合到一个SpringBoot项目中。 下面是详细步骤 什么是Tess4j 在实现OCR之前&#xff0c;先要分清楚Tesseract和Tess4j的区别。 Tesseract是一个开源的光学字符识别&#xff08…

Python数据分析实战-applymap、apply、map有什么区别?(附源码和实现效果)

实现功能 applymap&#xff1a;applymap 是 DataFrame 对象的方法&#xff0c;用于对 DataFrame 中的每个元素应用一个函数。它将函数应用于 DataFrame 的每个元素&#xff0c;并返回一个新的具有相同形状的 DataFrame。applymap 通常用于对 DataFrame 中的每个单元格进行元素…