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在真实项目中,是一个非常好用的工具类。
Apache commons collection4包下的CollectionUtils也很强大,可以结合来使用。
当然还有它的ListUtils、SetUtils、MapUtils等等都非常好用
参考:【小家java】Java之Apache Commons-Collections4使用精讲(Bag、Map、List、Set全覆盖)
未完,待续。。。
总结
本篇探讨了AOP的编程思想、过程,其主要思想是让开发者把诸多业务流程中的通用功能抽取出来,单独编写功能代码,形成独立的模块,这些模块也被称为切面。在业务流程执行过程中,Spring框架会根据业务流程要求,自动把切面切入到流程的合适位置