您的位置:首页 > 编程语言 > Java开发

Java基础之Annotation-注解处理器,实现简版FactoryBean

2019-05-04 15:28 246 查看

小编是一个有着5年工作经验的全栈开发工程师,关于Java编程,自己有做材料的整合,一个完整的Java编程学习路线,学习材料和工具,能够进我的群  881982657收取,免费送给大家,希望你也能凭着自己的努力,成为下一个优秀的程序员。

在上一篇文章[Java基础之Annotation]中介绍了Annotation的的基础知识,并自定义了Entity和EntityProperty这两个注解,本篇将介绍如何利用Entity来自动注入bean,EntityProperty初始化bean。

注解处理器

自JDK1.5之后,java.lang.reflect 包所有提供的反射API扩充了读取运行时Annotation信息的能力,当注解被标记为运行时可见@Retention(RetentionPolicy.RUNTIME),就可以通过反射来处理注解。

常用API:

  • T getAnnotation(Class annotationClass):返回改程序元素上存在的、指定类型的注解,如果该类型注解不存在,则返回null。

  • Annotation[] getAnnotations():返回该程序元素上存在的所有注解。

  • boolean is AnnotationPresent(ClassannotationClass):判断该程序元素上是否包含指定类型的注解,存在则返回true,否则返回false.

  • Annotation[] getDeclaredAnnotations():返回直接存在于此元素上的所有注释。与此接口中的其他方法不同,该方法将忽略继承的注释(如果没有注释直接存在于此元素上,则返回长度为零的一个数组)该方法的调用者可以随意修改返回的数组;这不会对其他调用者返回的数组产生任何影响。

简版FactoryBean实现

需求:写个bean工厂,通过bean工厂可以获得所有添加了注解的bean对象,且bean对象的成员属性的值可以通过注解来设置。

实现:

定义Entity和EntityProperty两个注解:

  • Entity,添加了该注解的类会被BeanFactory自动加载,并实例会;

  • EntityProperty,通过该注解给bean的成员属性赋值(beanFactory在解析到成员属性有EntityProperty注解时,通过反射为其赋值);

目录结果如下图:

  • BeanFactory,遍历指定包下所有class文件,凡是添加@Entity注解的class会被实例化;

  • Car.java和User.java,User添加了注解,Car未添加注解,用于测试@Entity是否生效;

  • AnnotationClassUtil,加载指定包下的class文件,工具类;

  • AppAnnotation,入口类,有main方法;

目录结构

Entity.java注解类

Entity

EntityProperty.java注解类

EntityProperty

User.java

@Entity用于标识该类将会被自动注入;

@EntityProperty用于标识该类实例化时的初始值;

User.java

AnnotationClassUtil.java

主要是第38行

AnnotationClassUtil.java

BeanFactory.java

BeanFactory.java-1

BeanFactory.java-2

运行结果

只有User.java被自动注入,并且初始值也被正确赋予。

运行结果

       

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: