1、自定义注解
package com.test.controller.com.inter; |
2、测试类(通过service和controller层进行模拟)
controller类:
package com.test.controller.com.inter; |
Service层类
package com.test.controller.com.inter; |
3、测试
package com.test.controller.com.inter;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class InterTest {
public static void main(String[] args){
reflect1();
}
public static void reflect1(){
PersonController personController = new PersonController();
Class<? extends PersonController> clazz = personController.getClass();
Field[] fields = clazz.getDeclaredFields();
for (Field field:fields){
//获取属性 是否有注解
Autoware annotation = field.getAnnotation(Autoware.class);
if(annotation != null){
field.setAccessible(true);
//获取当前属性的类型,有了类型后可以创建具体对象
Class<?> type = field.getType();
//创建具体对象
Object o = null;
try {
o = type.newInstance();
field.set(personController, o);
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
System.out.println(personController.getPersonService());
}
// public static void reflect2(){
// PersonController personController = new PersonController();
// PersonService personService = new PersonService();
// System.out.println(personService);
userController.setUserService(userService);
System.out.println(userController.getUserService());
// Class<? extends PersonController> clazz = personController.getClass();
// try {
// //获取属性
// Field serviceField = clazz.getDeclaredField("userService");
// serviceField.setAccessible(true);
//
// //获取对应的ser方法
// String name = serviceField.getName();
// name = name.substring(0,1).toUpperCase()+name.substring(1,name.length());
// String methodName = "set"+name;
// try {
// Method method = clazz.getDeclaredMethod(methodName,PersonService.class);
// //调用serUserService方法
// method.invoke(personController,personService);
// } catch (Exception e) {
// e.printStackTrace();
// }
//
// } catch (NoSuchFieldException e) {
// e.printStackTrace();
// }
// System.out.println(personController.getPersonService());
// }
}