这是我参与2022首次更文挑战的第24天,活动详情查看:2022首次更文挑战」
前言
昨天跟着学习了和Java注解相关的比较基础一些的知识,文章里有自定义注解相关的代码实例,大家可以去看。接着这个继续~
自定义注解的思路
- 首先定义自己的注解(@Target、@Retention)
@Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME)
public @interface MyMethodAnnotation {
public String title() default "";
public String description() default "";
}
- 然后使用注解
@Override
@MyMethodAnnotation(title = "toStringMethod", description = "override toString method")
public String toString() {
return "Override toString method";
}
- 可以使用反射接口获取注解信息
- 先获取所有的methods
- 遍历方法上是否有相应注解
- 获取注解对象信息
注解的实际应用场景
注解不能使用关键字extends来继承,要实现这种继承可以用@Inherited,如果某个类使用了被@Inherited修饰的Annotation,那么它的子类会自动具有这个注解。
- 框架的演进:配置化到注解化 Spring框架配置化到注解化的转变
- 继承实现到注解实现:Junit3到Junit4 一个模块的封装,如果结合注解可以很大程度地提高实现的优雅度(降低耦合度),例如Junit3到Junit4的演化。Junit3实现UT通过继承来实现,初始化是通过Override父类方法进行;Junit4实现UT则是通过定义@Before、@Test、@After等等注解来实现。
- 自定义注解和AOP:通过切面来实现解耦
最常见的就是使用SpringAop切面实现统一的操作日志管理:
- 自定义Log注解
- 实现日志的切面,对自定义注解Log做切点进行拦截(即对注解了@log的方法进行切点拦截)
- 使用@Log注解
通过注解+AOP最终的目标是为了实现模块的解耦,上面那篇文章中有一个例子,大家想看可以去看看。
综述
对于注解的理解就是以上这些,入门阶段,理解了这些概念,能看懂例子,用的时候可以用明白,我觉得就已经算完成目标了,继续努力吧!