自己动手实现@Autowired注解
2017-03-17 12:34
507 查看
要自己实现@Autowired注解,首先需要了解反射机制和自定义注解。本文中只简单解释用到的地方。
由于还没有了解解析XML文件,所以还没有实现自动扫描,这里的注解是手动扫描的。
文中有很多不足之处还请多多指教。
一、首先,写一个自己的注解。
二、随意创建一个类AMybean
三、创建一个类,在类中使用自定义注解注入AMybean
四、重点:通过注解获取该域的实例对象然后赋值给<三>中定义的a
五、测试是否成功注入
由于还没有了解解析XML文件,所以还没有实现自动扫描,这里的注解是手动扫描的。
文中有很多不足之处还请多多指教。
一、首先,写一个自己的注解。
//@Target元注解表示允许这个注解可以使用的范围,这里我们只完成域的作用范围。 //@Retention元注解在这里表示该注解保留到运行时期。 @Target({ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) public @interface MyAutowired { }
二、随意创建一个类AMybean
//类中随意写了一个方法 public class AMybean { public int adds(int a,int b){ return a+b; } }
三、创建一个类,在类中使用自定义注解注入AMybean
public class BMybean { @MyAutowired//使用自定义注解 public AMybean a;//注意这里并没有给a赋值 public void la(){//使用a的方法 System.out.print(a.adds(1,2)); } }
四、重点:通过注解获取该域的实例对象然后赋值给<三>中定义的a
public class MyReflect { //传入对象 public static boolean setObjByFieldAnno(Object o){ //获取Class Class c=o.getClass(); /*获得域*/ Field []fields=c.getDeclaredFields(); //返回值用于判断是否完成这个方法 boolean b=false; //遍历域 for (Field f:fields) { //获取域中的注解,遍历注解 Annotation []anns=f.getAnnotations(); for (Annotation ann:anns) { //这里使用instanceof关键字,判断注解中是否包含MyAutowired if (ann instanceof MyAutowired){ System.out.println(f.getName()+"--这个域使用了我的注解"); //f.getGenericType():获取该域的类型 System.out.println(f.getGenericType().toString()+"--这个域的类型"); //转成Class Class c2= (Class) f.getGenericType(); try {//创建实例 Object o2= c2.newInstance(); //这个方法是将实例注入到这个域中,详细使用请查阅JAVA API f.set(o,o2); System.out.println("成功注入"); //成功则返回true b=true; return b; } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } } } return b; }
五、测试是否成功注入
public class testdemo { public static void main(String[] args){ BMybean bMybean=new BMybean(); //手动注入 boolean b=MyReflect.setObjByFieldAnno(bMybean); if (b){ bMybean.la(); }else{ System.out.println("getObjByFieldAnno 不正确"); } } } /* 打印结果: myAutowired.BMybean a--这个域使用了我的注解 class myAutowired.AMybean--这个域的类型 成功注入 3 */
相关文章推荐
- Spring中注解的实现原理-Autowired和Resource的区别
- 使用@Autowired注解接口实现时,启动项目时报org.springframework.beans.factory.BeanCreationExceptio
- Java自定义注解——简易实现spring @Autowired
- Java自定义注解——简易实现spring @Autowired
- Spring系列【04】应用@Autowired注解实现Bean的注入
- ssm项目中 @Autowired 注解在接口类上却是注入的是他的实现类
- 4、spring使用@Autowired注解实现自动装配
- 自己动手写注解实现业务bean的字段验证
- Spring 注解实现Bean依赖注入之@Autowired
- 自己动手实现Java注解(Java Annotation in Action)
- 自己动手实现智能指针auto_ptr
- 自己动手实现一个简单的string类(三)
- 自己动手实现基于MIDP的ResourceBundle类
- 自己动手实现自定义线程池
- 使用Spring2.5的Autowired实现注释型的IOC
- [自己动手]用Java的反射实现DAO
- 使用Spring2.5的Autowired实现注释型的IOC
- 使用Spring2.5的Autowired实现注释型的IOC
- 使用Spring2.5的Autowired实现注释型的IOC
- 自己动手实现纯Web远程监控系统(纯Web,跨浏览器)