【小家Spring】Spring Framework提供的实用纯Java工具类大合集(二)(下)

简介: 【小家Spring】Spring Framework提供的实用纯Java工具类大合集(二)(下)

SpringProperties


位于org.springframework.core包。我认为他是Spring给我们提供的一个便捷处理.properties文件的好帮手。


在classpath类路径下建一个文件:spring.properties(必须是类路径下,切必须叫这个文件名)


name=fangshixiang


    public static void main(String[] args) {
        String name = SpringProperties.getProperty("name");
        System.out.println(name); //fangshixiang
    }


就这样,非常简单的,就可议读出spring.properties这个配置文件里面指定key的值。这样若我们某些参数需要外部化配置,使用这个参数可谓是非常非常的方便啊。


application.properties这个配置文件尽量防止一些主线的配置文件,而spring.properties可议放置和容器无关、我们具体业务自己需要定义的配置(比如业务开关、业务时间等等)


它的源码也非常的简单,就是它在项目启动的时候会去类路径扫描名叫spring.properties,有就加载进来,没有就算了(就算我们没有此配置文件,也可以在一个地方set进去,再去另外一个地方get出来)。它提供如下四个方法:


  public static void setProperty(String key, @Nullable String value) {
    if (value != null) {
      localProperties.setProperty(key, value);
    }
    else {
      localProperties.remove(key);
    }
  }
  @Nullable
  public static String getProperty(String key) {
    String value = localProperties.getProperty(key);
    if (value == null) {
      try {
        value = System.getProperty(key);
      }
      catch (Throwable ex) {
        if (logger.isDebugEnabled()) {
          logger.debug("Could not retrieve system property '" + key + "': " + ex);
        }
      }
    }
    return value;
  }
  // 显然这两个事专门方便我们来处理开关得~~~~
  public static void setFlag(String key) {
    localProperties.put(key, Boolean.TRUE.toString());
  }
  public static boolean getFlag(String key) {
    return Boolean.parseBoolean(getProperty(key));
  }


SpringVersion、SpringBootVersion


    public static void main(String[] args) {
        // 貌似没有SpringCloudVersion
        System.out.println(SpringVersion.getVersion()); //4.3.23.RELEASE
        System.out.println(SpringBootVersion.getVersion()); //1.5.20.RELEASE
    }


Constants:常量获取工具


在org.springframework.core包中,在处理类的常量的时候,我们可以借助它来处理~~。

它只有一个构造函数,传入一个Class,通过反射的方式获取目标source类中所有的public static final的常量放入一个Map中


常用的几个方法:通过asXX方法取出相应的值。


Demo如下:


public class Main {
    public static final int MAX_NUM = 5;
    public static final int MIN_NUM = 2;
    public static final String NAME = "fsx";
    public static final Map<String,Object> MAP = new HashMap<>();
    public static void main(String[] args) {
        Constants constants = new Constants(Main.class);
        System.out.println(constants.asNumber("MAX_NUM").intValue()); // 5
        System.out.println(constants.asString("NAME")); //fsx
        // 自动总个数
        System.out.println(constants.getSize()); //3
        //=============它的好处是提供一些批量获取的方法,在属性很多的时候  这个特别好用==============
        // 匹配前缀 批量获取 注意:此处返回的是字段名,不是值  不区分大小写  下同
        System.out.println(constants.getNames("M")); //[MIN_NUM, MAX_NUM, MAP]
        System.out.println(constants.getNames("m")); //[MIN_NUM, MAX_NUM, MAP]
        // 后缀匹配
        System.out.println(constants.getNamesForSuffix("NUM")); //[MIN_NUM, MAX_NUM]
        // 拿到所有的值  前缀匹配
        System.out.println(constants.getValues("M")); //[{}, 2, 5]
        // 后缀匹配
        System.out.println(constants.getValuesForSuffix("E")); //[fsx]
    }
}



注意:常量必须是 public static final 修饰的,否则使用asXX方法取出的时候抛exception


ObjectUtils


ObjectUtils工具类会尝试优雅的处理null输入,对于空输入通常不会抛出异常,每个方法都更详细的记录其行为。

另外它提供的方法:addObjectToArray()、toObjectArray()、isArray()、arrayEquals()对处理数组都特别的好用


CollectionUtils(spring-core包的)


CollectionUtils在真实项目中,是一个非常好用的工具类。


image.png


Apache commons collection4包下的CollectionUtils也很强大,可以结合来使用。

当然还有它的ListUtils、SetUtils、MapUtils等等都非常好用

参考:【小家java】Java之Apache Commons-Collections4使用精讲(Bag、Map、List、Set全覆盖)


未完,待续。。。

总结


本篇探讨了AOP的编程思想、过程,其主要思想是让开发者把诸多业务流程中的通用功能抽取出来,单独编写功能代码,形成独立的模块,这些模块也被称为切面。在业务流程执行过程中,Spring框架会根据业务流程要求,自动把切面切入到流程的合适位置


相关文章
|
19天前
|
缓存 前端开发 Java
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
|
19天前
|
缓存 Java 数据库
【Java面试题汇总】Spring篇(2023版)
IoC、DI、aop、事务、为什么不建议@Transactional、事务传播级别、@Autowired和@Resource注解的区别、BeanFactory和FactoryBean的区别、Bean的作用域,以及默认的作用域、Bean的生命周期、循环依赖、三级缓存、
【Java面试题汇总】Spring篇(2023版)
|
9天前
|
人工智能 开发框架 Java
重磅发布!AI 驱动的 Java 开发框架:Spring AI Alibaba
随着生成式 AI 的快速发展,基于 AI 开发框架构建 AI 应用的诉求迅速增长,涌现出了包括 LangChain、LlamaIndex 等开发框架,但大部分框架只提供了 Python 语言的实现。但这些开发框架对于国内习惯了 Spring 开发范式的 Java 开发者而言,并非十分友好和丝滑。因此,我们基于 Spring AI 发布并快速演进 Spring AI Alibaba,通过提供一种方便的 API 抽象,帮助 Java 开发者简化 AI 应用的开发。同时,提供了完整的开源配套,包括可观测、网关、消息队列、配置中心等。
527 8
|
20天前
|
Java 数据库连接 API
【Java笔记+踩坑】Spring Data JPA
从常用注解、实体类和各层编写方法入手,详细介绍JPA框架在增删改查等方面的基本用法,以及填充用户名日期、分页查询等高级用法。
【Java笔记+踩坑】Spring Data JPA
|
20天前
|
Java 数据库连接 数据格式
【Java笔记+踩坑】Spring基础2——IOC,DI注解开发、整合Mybatis,Junit
IOC/DI配置管理DruidDataSource和properties、核心容器的创建、获取bean的方式、spring注解开发、注解开发管理第三方bean、Spring整合Mybatis和Junit
【Java笔记+踩坑】Spring基础2——IOC,DI注解开发、整合Mybatis,Junit
|
2月前
|
Java
Java应用结构规范问题之在UnitConvertUtils工具类将千米转换为米的问题如何解决
Java应用结构规范问题之在UnitConvertUtils工具类将千米转换为米的问题如何解决
|
2月前
|
Java 前端开发 Apache
Apache Wicket与Spring MVC等Java Web框架大PK,究竟谁才是你的最佳拍档?点击揭秘!
【8月更文挑战第31天】在Java Web开发领域,众多框架各具特色。Apache Wicket以组件化开发和易用性脱颖而出,提高了代码的可维护性和可读性。相比之下,Spring MVC拥有强大的生态系统,但学习曲线较陡;JSF与Java EE紧密集成,但在性能和灵活性上略逊一筹;Struts2虽成熟,但在RESTful API支持上不足。选择框架时还需考虑社区支持和文档完善程度。希望本文能帮助开发者找到最适合自己的框架。
31 0
|
2月前
|
Java Spring 开发者
Java Web开发新潮流:Vaadin与Spring Boot强强联手,打造高效便捷的应用体验!
【8月更文挑战第31天】《Vaadin与Spring Boot集成:最佳实践指南》介绍了如何结合Vaadin和Spring Boot的优势进行高效Java Web开发。文章首先概述了集成的基本步骤,包括引入依赖和配置自动功能,然后通过示例展示了如何创建和使用Vaadin组件。相较于传统框架,这种集成方式简化了配置、提升了开发效率并便于部署。尽管可能存在性能和学习曲线方面的挑战,但合理的框架组合能显著提升应用开发的质量和速度。
33 0
|
2月前
|
安全 Java 开发者
Java反射:Spring Boot背后的魔法,让你的代码质量飞跃的神秘力量!
【8月更文挑战第29天】Java反射机制允许程序在运行时访问和修改类、接口、方法等属性,而Spring Boot则广泛应用反射实现依赖注入和自动配置。本文探讨如何利用反射机制提升Spring Boot应用的代码质量,包括动态类型处理、元数据访问及依赖注入等方面。通过实战示例展示动态调用方法和自定义注解处理,强调反射机制对代码灵活性与扩展性的贡献,同时提醒开发者注意性能和安全问题。
47 0
|
2月前
|
Java 开发工具 Spring
【Azure Spring Cloud】使用azure-spring-boot-starter-storage来上传文件报错: java.net.UnknownHostException: xxxxxxxx.blob.core.windows.net: Name or service not known
【Azure Spring Cloud】使用azure-spring-boot-starter-storage来上传文件报错: java.net.UnknownHostException: xxxxxxxx.blob.core.windows.net: Name or service not known
下一篇
无影云桌面