ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【优雅代码】19-spring下的优秀工具类-加载

2022-01-18 22:32:13  阅读:127  来源: 互联网

标签:19 spring System println lesson 加载 com grace out


【优雅代码】19-spring下的优秀工具类-加载

欢迎关注b站账号/公众号【六边形战士夏宁】,一个要把各项指标拉满的男人。该文章已在github目录收录。
屏幕前的大帅比大漂亮如果有帮助到你的话请顺手点个赞、加个收藏这对我真的很重要。别下次一定了,都不关注上哪下次一定。

1.背景介绍

spring中有很多神奇的匹配、加载,它用到的工具类会在该篇章中介绍

2.不通过反射获取类信息

2.1介绍

class文件是懒加载,而spring是如何不在jvm加载前就获取到类信息的。

2.2使用

@SneakyThrows
public static void getForClass() {
    // 和cglib一样基于ASM技术的
    // spring获取类的元数据
    SimpleMetadataReaderFactory simpleMetadataReaderFactory = new SimpleMetadataReaderFactory();
    MetadataReader metadataReader = simpleMetadataReaderFactory.getMetadataReader("com.example.demo.lesson.grace.springloader.SpringLoaderExampleTest");
    ClassMetadata classMetadata = metadataReader.getClassMetadata();
    // 获取类名
    System.out.println(classMetadata.getClassName());
    // 获取子类
    System.out.println(classMetadata.getMemberClassNames()[0]);
    // 获取外部类
    MetadataReader metadataReader2 = simpleMetadataReaderFactory.getMetadataReader("com.example.demo.lesson.grace.springloader.SpringLoaderExampleTest.SpringLoaderExampleTestMember");
    System.out.println(metadataReader2.getClassMetadata().getEnclosingClassName());
    // 获取注解
    AnnotationMetadata annotationMetadata = metadataReader.getAnnotationMetadata();
    for (String annotationType : annotationMetadata.getAnnotationTypes()) {
        System.out.println(annotationType);
    }
    // 判断注解的注解
    System.out.println(annotationMetadata.hasMetaAnnotation(Component.class.getName()));
    // 判断是否有注解
    System.out.println(annotationMetadata.hasAnnotation(Service.class.getName()));
    // 获取有该注解的方法
    Set<MethodMetadata> annotatedMethods = annotationMetadata.getAnnotatedMethods(Valid.class.getName());
    System.out.println();
}

3.通过匹配符获取文件

3.1介绍

spring读取相关文件时使用匹配符使用该功能

3.1使用

@SneakyThrows
public static void matchResource() {
    // spring下匹配文件
    ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();
    // 获取resource下文件
    Resource[] resources = resourcePatternResolver.getResources("com/example/demo/lesson/grace/springloader/*.class");
    System.out.println(resources);
    // 获取jar包文件
    Resource[] resources2 = resourcePatternResolver.getResources("classpath*:org/springframework/core/io/*.class");
    System.out.println(resources2);
}

4.通过匹配符判断是否符合

4.1介绍

springMVC经典使用。不仅如此可以适用范围极广

4.2使用

public static void pathMatch() {
    // springMVC路径判断
    AntPathMatcher matcherDot = new AntPathMatcher(".");
    String pathDot = "com.example.demo.lesson.grace.springloader.SpringLoaderExampleTest";
    // true
    System.out.println("step1");
    System.out.println(matcherDot.match("com.example.demo.lesson.grace.springloader.*", pathDot));
    // false
    System.out.println("step2");
    System.out.println(matcherDot.match("com.example.demo.lesson.grace.springloader2.*", pathDot));
    // true
    System.out.println("step3");
    System.out.println(matcherDot.match("com.example.demo.lesson.grace.springloader.S?????LoaderExampleTest", pathDot));

    AntPathMatcher matcherSep = new AntPathMatcher("/");
    String pathSep = "com/example/demo/lesson/grace/springloader/SpringLoaderExampleTest";
    // true
    System.out.println("step4");
    System.out.println(matcherSep.match("com/example/demo/lesson/grace/**", pathSep));
    System.out.println("step5");
    // true
    System.out.println(matcherSep.match("com/example/demo/lesson/grace/springloader/{sp}", pathSep));

}

5.匹配符替换字符串

5.1介绍

spring相关配置文件经典使用工具

5.2使用

public static void matchProperty() {
    PropertyPlaceholderHelper helper = new PropertyPlaceholderHelper("${", "}");
    String text = "user=${user},name=${name}";
    Properties props = new Properties();
    props.setProperty("user", "siri");
    props.setProperty("name", "apple");
    // user=siri,name=apple
    System.out.println(helper.replacePlaceholders(text, props));
}

6.泛型工具类

6.1介绍

spring简化获取泛型类型的操作

6.2使用

public static void getType() {
    Class<?> aClass = GenericTypeResolver.resolveTypeArgument(SpringLoaderExampleTest.class, ISpringLoaderExampleTest.class);
    // class java.lang.String
    System.out.println(aClass);
}

标签:19,spring,System,println,lesson,加载,com,grace,out
来源: https://blog.csdn.net/seal_li/article/details/122570181

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有