应用场景

项目开发中某个功能需要抽取成方法写成一个工具类,提供给别人使用。写过工具类的人都知道,工具类中的方法一般都是静态方法,可以直接使用类名点方法名调用,

使用很方便,比如判断某个对象是否为空的方式Objects.equals().由于我写的这个工具类中需要读取配置文件中的内容,但是常规方法注入成员变量时都不是静态的,比

如这种方式:

@Data
@Component
public class GBaseApiConfig {

  @Value("${gbase.api.prefix}")
  private String gbaseApi;

}

工具类中的静态方法直接调用这种方式注入的成员变量会出现空指针异常,因为Java中的语法规定静态的方法只能调用静态的方法或者是成员变量,否则会报错如下:

想使用其他非静态的成员变量或者是方法只能通过创建对象来调用,可是工具类中不可能这么干。于是想到如下方法

方法一

通过静态代码块来读取、加载配置文件中的内容,代码如下

先定义一个静态的成员变量,然后在静态代码块中读取需要的配置文件信息,在给静态变量赋值。这种方式亲自测试完全可用。

方法二

可是过了一段时间后,项目经理让我们修改代码,原因是希望项目中的代码风格统一,全部都使用@Value注解注入的方式。

不久一个同事就找到一个可行的办法,代码如下

实现spring中的InitializingBean接口,然后重写afterPropertiesSet方法即可。实现方式是,先将配置文件中的值注入到一个成员变量中,然后通过方法

afterPropertiesSet实现工具类的初始化,这样就将配置文件中的信息注入到工具类中。测试可用。

Java中读取配置文件中的内容,并将其赋值给静态变量的方法的更多相关文章

  1. java后台读取配置文件中key与value -----demo

    public class ResourcesUtils { /* * @description:根据属性获取文件名 * * @param:propertyName文件的属性名 * * @return: ...

  2. java中读取配置文件中的数据

    1.先在项目中创建一个包(如:config),再创建一个配置文件(如:a.properties),添加配置信息如下:比如:name=kakaage=28 2.代码:import java.io.IOE ...

  3. java后台读取配置文件中key与value -----demo2

    /** * * @Title: getValue * @Description: TODO * @param key * @return import java.util.Properties; * ...

  4. Java工程中如何读取配置文件中参数信息

    Java中读取配置文件中参数: 方法一:通过JDK中Properties来实现对配置文件的读取. Properties主要用于读取Java的配置文件,不同的编程语言有自己所支持的配置文件,配置文件中很 ...

  5. java.util.Properties 读取配置文件中的参数

    用法 getProperty方法的返回值是String类型. java.util.Properties 读取配置文件中的参数 //读取配置文件 FileInputStream inStream = n ...

  6. springboot读取配置文件中的信息

    在一个项目中,我们有时候会把一些配置信息写入到一个配置文件中,在java代码中读取配置文件的信息.在此记录下读取属性文件中的内容. 在springboot项目中,springboot的配置文件可以使用 ...

  7. .NET Core类库中读取配置文件

    最近在开发基于.NET Core的NuGet包,遇到一个问题:.NET Core中已经没有ConfigurationManager类,在类库中无法像.NET Framework那样读取App.conf ...

  8. 解决spring中不同配置文件中存在name或者id相同的bean可能引起的问题

    小总结: 如果启用组件扫描,bean名称不同时,Spring将尝试创建一个bean,即使该类的bean已经在spring-config.xml中定义了. 但是,如果在spring配置文件中定义的bea ...

  9. java 解析/读取 种子/bt/torrent 内容

    碰到不会的技术问题,我还是先度娘.能中文看懂,为什么非要看英文呢. java 解析/读取 种子/bt/torrent  内容,这个度娘给的满意答案并不是很多.GG之后的搜索结果出现了stackover ...

随机推荐

  1. Python Unofficial Windows Binary

    python一些安装包有时候在windows下无法 直接安装. 可以在一个非官方的Python Windows扩展库里面找到对应的打包好的whl,下载后直接安装. https://www.lfd.uc ...

  2. realm数据库报错:Changing Realm data can only be done from inside a transaction.

    在编写realm数据库相关时: 代码: List<Student> delByStudent(String priNum){ RealmResults<Student> stu ...

  3. 痞子衡嵌入式:解锁i.MXRTxxx上FlexSPI模块自带的地址重映射(Remap)功能

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT三位数系列隐藏的FlexSPI Remap功能. 前段时间痞子衡写了一篇文章 <利用i.MXRT1060,1010上新 ...

  4. 提升布局能力!理解 CSS 的多种背景及使用场景和技巧

    CSS background是最常用的CSS属性之一.然而,并不是所有开发人员都知道使用多种背景.这段时间都在关注使用多种背景场景.在本文中,会详细介绍background-image`属性,并结合图 ...

  5. Rainbow: Combining Improvements in Deep Reinforcement Learning

    郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布! arXiv:1710.02298v1 [cs.AI] 6 Oct 2017 (AAAI 2018) Abstract 深度强化学习社区对D ...

  6. Hive 常见面试题(一)

    面试题: hive 内部表和外部表的区别? hive 是如何实现分区的? Hive 有哪些方式保存元数据,各有哪些优缺点? hive中order by.distribute by.sort by和cl ...

  7. 4gl游标cursor

    游標有多種寫法,一種是報表里常見的 這種寫法呢,先定義一個接受sql語句的變量l_sql,而接受到的語句實際上只是一連串的字符串,還包含了4gl裡面的一些變量.寫好的l_sql裡面之所以有多個分段的雙 ...

  8. Java面试题(设计模式篇+Spring/Spring MVC篇)

    设计模式 88.说一下你熟悉的设计模式? 自行熟悉. 89.简单工厂和抽象工厂有什么区别? 简单理解简单工厂:对 一个对象的创建进行封装.抽象工厂:对 一组对象的创建进行封装. 比如生产 陶瓷马 和  ...

  9. 文件属性及find命令总结

    第1章   文件属性 1.1   文件的属性 1.1.1    查看文件的详细属性       PS:ls查看的文件或目录默认的是按照名字的第一个字母进行正序排序       ls 参数选项: -t ...

  10. 移动开发中如何整合HTML 5和原生代码

    移动开发中如何整合HTML 5和原生代码 https://blog.csdn.net/lvjin110/article/details/41038565