`
raymond.chen
  • 浏览: 1438197 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

反射工具包Reflections的使用

    博客分类:
  • Java
 
阅读更多

Reflections 通过扫描 classpath,索引元数据,允许在运行时查询这些元数据,也可以保存收集项目中多个模块的元数据信息。

 

maven依赖包:

<dependency>
	<groupId>org.reflections</groupId>
	<artifactId>reflections</artifactId>
	<version>0.9.11</version>
</dependency>

 

public class ReflectionsTest {
	public static final String BASE_PACKAGE = "com.seasy";
	
	public static void main(String[] args) {
		//查找资源文件
		Set<String> properties = getResourceReflections(BASE_PACKAGE).getResources(Pattern.compile(".*\\.properties"));
		for(String s : properties){
			System.out.println(s);
		}

		//找出被指定注解类标注的所有接口、类
		Set<Class<?>> annotationSet = getFullReflections(BASE_PACKAGE).getTypesAnnotatedWith(Mapper.class);
		for(Class<?> clazz : annotationSet){
			System.out.println(clazz.getName());
			Mapper annotation = clazz.getAnnotation(Mapper.class);
			System.out.println(annotation.value());
		}
		
		//找出指定接口的所有子类
		Set<Class<?extends CountryMapper>> classes = getFullReflections(BASE_PACKAGE).getSubTypesOf(CountryMapper.class);
		for(Class<?> clazz : classes){
			System.out.println(clazz.getName());
		}
		
		//查找有某个注解类的方法
		Set<Method> methodSet = getFullReflections(BASE_PACKAGE).getMethodsAnnotatedWith(GetMapping.class);
		for(Method m : methodSet){
			System.out.println(m.getDeclaringClass().getName());
			System.out.println(m.getName());
		}
		
		//查找有某个注解类的字段
		Set<Field> fieldSet = getFullReflections(BASE_PACKAGE).getFieldsAnnotatedWith(Autowired.class);
		for(Field f : fieldSet){
			System.out.println(f.getName());
		}
	}
	
	private static Reflections getResourceReflections(String basePackage){
		ConfigurationBuilder builder = new ConfigurationBuilder();
		builder.addUrls(ClasspathHelper.forPackage(basePackage));
		builder.setScanners(new ResourcesScanner());
		
		Reflections reflections = new Reflections(builder);
		return reflections;
	}
	
	/**
	 * 如果没有配置scanner,默认使用SubTypesScanner和TypeAnnotationsScanner
	 * @param basePackage 包路径
	 */
	private static Reflections getFullReflections(String basePackage){
		ConfigurationBuilder builder = new ConfigurationBuilder();
		builder.addUrls(ClasspathHelper.forPackage(basePackage));
		builder.setScanners(new TypeAnnotationsScanner(), new SubTypesScanner(),
				new MethodAnnotationsScanner(), new FieldAnnotationsScanner());
		builder.filterInputsBy(new FilterBuilder().includePackage(basePackage));
		
		Reflections reflections = new Reflections(builder);
		return reflections;
	}
}

 

分享到:
评论

相关推荐

    reflections,.zip

    【标题】"reflections.zip" 是一个开源项目,它的核心功能是进行反射扫描,以便在Java应用程序的类路径中搜索和索引元数据。这个工具非常有用,因为它允许开发者在程序运行时动态地发现和查询类、接口、注解以及其他...

    PIDI - Planar Reflections

    本文将深入探讨PIDI - Planar Reflections这一工具,以及如何在Unity3D项目中有效地利用它。 平面反射技术,顾名思义,是通过在平面上捕捉并映射周围环境的反射,来模拟真实世界中物体表面反射的现象。在Unity3D中...

    Unity射线反射算法资源包.rar

    这种方法称为屏幕空间反射(Screen Space Reflections, SSR),虽然可能会有精度损失,但能显著提高性能。 资源包中的"Unity射线反射算法资源包.unitypackage"可能包含以下内容: 1. 示例场景:展示射线反射效果的...

    搬运 镜面反射shader

    本资源提供的"搬运镜面反射shader"是针对Unity开发者的实用工具,可以帮助他们快速实现高质量的镜面反射效果,无需从头编写复杂的着色器代码。 镜面反射Shader主要依赖于以下几种技术: 1. **法线贴图(Normal ...

    reflections-utils:一组使用反射和注释的有用方法

    对于那些需要频繁使用反射和注解的项目来说,`reflections-utils`无疑是一个值得考虑的工具。 总结一下,`reflections-utils`是一个针对Java反射和注解的实用库,它提供了一系列便利的API,帮助开发者更高效地进行...

    UN283 unity3d游戏插件 材质shader 实时折射 镜面反射 Mirror_Shaders

    Unity3D中的镜面反射通常涉及到使用高光贴图(Highlight Map)和法线贴图(Normal Map)来模拟物体表面的微小凹凸,以及使用屏幕空间反射(Screen Space Reflections, SSR)技术来计算反射。SSR可以在不增加过多性能开销的...

    Raytracing.rar_RayTracing_光线追踪_反射折射_反射模型

    在"Reflections and Refractions in Raytracing.pdf"这个文档中,可能会详细阐述如何在实际的光线追踪算法中实现这些模型。包括如何有效地计算反射路径,如何处理折射的边界条件,以及如何优化光照计算以提高渲染...

    AnnotationsExample:使用 org.reflections 0.9.9 API 查找带注释的类

    Reflections库是一个强大的Java反射和元数据发现框架,它可以扫描指定的类路径,找出所有带有特定注解的类,这对于理解和分析代码结构非常有用。 首先,我们需要了解Reflections库的基本用法。在项目中引入依赖后,...

    经典java反射和动态代理代码

    在"reflections"示例中,可能展示了如何使用反射来遍历类的字段、方法,或者在运行时动态创建和操作对象。 **Java动态代理** Java动态代理机制允许我们在运行时创建一个新的类,该类实现了特定接口,并能代理接口...

    reflections

    在IT行业中,"reflections"通常指的是Java编程语言中的反射机制。反射是Java提供的一种强大的工具,它允许程序在运行时检查和修改自身的结构和行为。这个机制在很多场景下非常有用,比如在框架开发、元数据处理、...

    Java runtime metadata analysis.zip

    - 初始化:创建一个Reflections实例,指定扫描的基包或类路径。 - 扫描:通过调用` Reflections.scan()`或`Reflections.collect()`进行扫描。 - 查询:使用`Reflections.getSubTypesOf()`, `Reflections....

    Java动态获取实现某个接口下所有的实现类对象集合

    这篇文章将向大家分享如何使用 Java 反射机制和第三方工具包 org.reflections 来实现动态获取实现某个接口下所有的实现类对象集合。 首先,为什么我们需要动态获取实现某个接口下所有的实现类对象集合?在实际开发...

    Water-超级好用的水资源. unity

    7. **链接资源**:在描述中提到了“链接资源”,这可能是指包含额外教程、示例场景、预设或者代码片段的链接,以帮助开发者理解和使用这个水资源工具包。这些链接资源对于初学者来说非常有价值,可以加速学习和项目...

    Unity技术-Shader Graph-水面倒影Shader.zip

    对于大面积的水面,可以考虑使用屏幕空间反射(Screen Space Reflections)来提高效率。 7. **应用Shader**:最后,将创建的Shader应用于水面物体的材质,然后在场景中观察效果。可能还需要调整参数以达到理想效果...

    50个左右的JAVA工具类,相对比较全

    7. **反射工具类**:如Java的java.lang.reflect包,或Google的Reflections库,用于运行时检查和操作类、接口、字段和方法。 8. **编码解码工具类**:如Base64编码解码,可以在Java 8的java.util.Base64中找到,或者...

    PowerFloorReflection:看起来像平面镜面反射的地板反射着色器

    为了实现这一效果,着色器通常会结合环境贴图(Environment Map)或屏幕空间反射(Screen-Space Reflections, SSR)技术,这两者都能捕捉场景中的其他物体并将其投射到地板上。 “基于UV的虚假深度反射淡入”是这个...

    java常用工具类.rar

    以上就是这些Java工具类的基本介绍,它们覆盖了文件操作、数据库交互、身份证处理、配置管理、反射、字符串操作、文件上传、邮件发送、时间和日期处理等多个方面,是Java开发中不可或缺的辅助工具。通过合理使用这些...

    Unity 水效果模拟

    Unity支持使用屏幕空间反射(Screen Space Reflections, SSR)技术来实现反射,而折射则可以通过修改片段着色器中的视图方向来模拟。 二、Shader编写 1. 基础Shader:创建一个自定义Shader,包含两个Pass,一个...

    Unity 玻璃 Shader

    - **_Reflections**:表示反射纹理,这里使用了一个立方体贴图(Cube Texture),用于捕捉环境反射效果,该贴图通过`TexGenCubeReflect`指令自动生成。 ##### 2.3 子着色器(SubShader) 子着色器是Shader的一个实例...

    麦克风混响效果器

    此外,该软件还提供了精细的参数调整选项,包括混响时间(Reverb Time)、早期反射(Early Reflections)、扩散度(Diffusion)和干湿比(Dry/Wet Mix),让用户可以定制出个性化的混响效果。 混响在音乐制作、语音...

Global site tag (gtag.js) - Google Analytics