# reflection **Repository Path**: ganluting/reflection ## Basic Information - **Project Name**: reflection - **Description**: 基础反射框架 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2019-09-20 - **Last Updated**: 2021-02-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # reflection # 版本变更 1.1 主要功能 1.0 主要功能 #### 介绍 基础反射框架,方便快捷实现对类或包进行操作 ### 使用说明 #### 1.包扫描说明 ###### 简单获取包下所有类 ``` Reflection reflection = Reflection.packageScan("com.flex.reflection.test").build(); //所有所有类元信息 reflection.getAllClasses(); ``` ###### 获取包含注解类 ``` Reflection reflection = Reflection .packageScan("com.flex.reflection.test") .includeAnnotation(PropertyTest.class) .build(); ``` #### 2.类元信息说明 ###### 直接加载类,并设置field值 ```$xslt MetaClass metaClass = MetaClass.of(TestCases.class).build(); metaClass.invokeSetField("property","hello world"); ``` ###### 监听值,监听方法调用 ```$xslt MetaClass metaClass = MetaClass .of(TestCases.class) .setPropertyListener(new PropertyListener() { @Override public void readProperty(String propertyName, Object fieldValue) { System.out.println("[read]"+propertyName+"=>"+fieldValue); } @Override public Object writeProperty(String propertyName, Object oldValue, Object newValue) { System.out.println("[write]"+propertyName+"=>"+"old["+oldValue+"],new["+newValue+"]"); return null; } }) .setEventMethodHandler(new Handler() { @Override public void beforeHandler(MetaObj metaObj, MethodWrapper methodReturnWrapper) { System.out.println("before"); } @Override public Object afterHandler(MetaObj metaObj, MethodWrapper methodReturnWrapper) { System.out.println("after,执行结果:"+methodReturnWrapper.getResult()); return null; } }).build(); metaClass.invokeSetField("property","hello world"); ``` ###### 通过字符串获取对象属性值 ``` MetaClass metaClass = MetaClass.of(TestCases.class).build(); //数组方法获取 metaClass.getExpressionField("list[0]"); //map方法获取,可通过名字或索引 metaClass.getExpressionField("map[aa]"); metaClass.getExpressionField("map[0]"); //普通变量获取 metaClass.getExpressionField("a.b.bb"); //动态变量绑定 metaClass.getExpressionField("map[{index}].{ss}", new BindExpressionHandler() { @Override public String toBind(String variableName) { if (variableName.equalsIgnoreCase("ss")) { return "bb"; } if (variableName.equalsIgnoreCase("index")) { return "0"; } return ""; } }); ```