网站首页 > 技术教程 正文
在上一篇文章[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被自动注入,并且初始值也被正确赋予。
运行结果
猜你喜欢
- 2024-10-19 Java 项目编译提示 javax.xml.bind.annotation does not exist 错误
- 2024-10-19 Android annotation包下常用的注解
- 2024-10-19 SpringMVC疑难一:mvc:annotation-dr
- 2024-10-19 Spring 中 AnnotationConfigUtils
- 2024-10-19 spring mvc 配置失效了?(springmvc的配置)
- 2024-10-19 为什么都爱着江南?黛瓦白墙,烟雨朦胧,是文人魂牵梦绕的故乡
- 2024-10-19 Spring框架系列之构造方法底层剖析01
- 2024-10-19 基于.NET6包含DDD,ES,CQRS等概念的开源
- 2024-10-19 spring 中 AnnotationUtils 的常用方法
- 2024-10-19 SpringBoot实战4-Spring基础-IoC容器
你 发表评论:
欢迎- 最近发表
-
- Win11学院:如何在Windows 11上使用WSL安装Ubuntu
- linux移植(Linux移植freemodbus)
- 独家解读:Win10预览版9879为何无法识别硬盘
- 基于Linux系统的本地Yum源搭建与配置(ISO方式、RPM方式)
- Docker镜像瘦身(docker 减小镜像大小)
- 在linux上安装ollama(linux安装locale)
- 渗透测试系统Kali推出Docker镜像(kali linux渗透测试技术详解pdf)
- Linux环境中部署Harbor私有镜像仓库
- linux之间传文件命令之Rsync傻瓜式教程
- 解决ollama在linux中安装或升级时,通过国内镜像缩短安装时长
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)