@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@Inherited
@Documented
public @interface MyAutowire {
}
public class TestController {
@MyAutowire
private TestService testService;
public void testControllerMethod(){
testService.testserviceMethod();
}
}
public class TestService {
public void testserviceMethod(){
System.out.println("我是service");
}
}
public class Test {
public static void main(String[] args) {
TestController testController=new TestController();
Class clazz=testController.getClass();
Field[] fields =clazz.getDeclaredFields();
for(Field field:fields){
Annotation annotation= field.getAnnotation(MyAutowire.class);
if(annotation!=null){
Class type=field.getType();
try {
//必须设置为可访问 否则会报错
field.setAccessible(true);
Object o=type.newInstance();
//拿到这个属性 向对象的这个属性设置值
field.set(testController,o);
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
//可以成功输出 service的打印的 我是service
testController.testControllerMethod();
}
}