美文网首页
JAVA注解Annottation

JAVA注解Annottation

作者: 橄榄树上结果果 | 来源:发表于2020-12-05 15:44 被阅读0次

注解(Annottation)又叫标注,是从java5开始增加的一种引用数据类型。 Java 8以前,注解只能在声明的地方使用(声明方法、变量、类等),Java 8开始,注解可以在任何地方使用(泛型、抛异常、方法中等),这是因为Java 8 增加了两种ElementType。注解本质上就是代码中的特殊标记,通过这些标记可以编译、类加载、以及运行时执行的处理。

语法为

   访问修饰符 @interface 注解名称{

         访问修饰符 属性类型 属性名称1();   // 注解成员;

         访问修饰符 属性类型 属性名称2()  default  默认值; // 注解成员;

    }

注解使用的常见场景

  • 生成文档

  • 代理配置文件

  • 权限管理

  • 日志改造

注解的用途:这个问题要配合元注解说明。元注解:用来标注注解的注解,用来配置这个注解的基本属性:

  • @Target(ElementType...)此注解的标注范围,用在哪里(类,接口,枚举,注解类,方法,参数), 

  • @Retention(RetentionPolicy...)此注解什么时候有效。

  • @Documented标示将注解的元素包含到javadoc中。

  • @Inherited标示改注解可以被继承,如果一个父类使用该注解,子类没有做其他注解时,默认继承了父类的注解。

  • @Repeatable标示该注解在一个地方可重复使用,可以取不同的值,

  • @Target:限定注解的作用范围,比如方法、类、变量、等,具体如下:

  1. ANNOTATION_TYPE,//可以用在另一个注解上(自定义元注解)

  2. CONSTRUCTOR,//可以用于构造方法上

  3. FIELD,//可以用于字段声明上,包括枚举上

  4. LOCAL_VARIABLE,//可以用于局部变量上

  5. METHOD,//可以用于方法上

  6. PACKAGE,//可以用于包声明上

  7. PARAMETER,//可以用于参数声明上

  8. TYPE,//可以用于类、接口、枚举声明上

  9. TYPE_PARAMETER,//表示注解能写在类型变量的声明语句中。1.8版本加入的

  10. TYPE_USE;//表示注解能写在使用类型的任何语句中 1.8版本加入

元注解有效期配置

  • @Retention(RetentionPolicy.SOURCE):注解将被编译器丢弃(该类型的注解信息只会保留在源码里,源码经过编译后,注解信息会被丢弃,不会保留在编译好的class文件里。使用场景:用来让读源码的人看的。

  • @Retention(RetentionPolicy.CLASS):注解在class文件中可用,但会被VM丢弃(该类型的注解信息会保留在源码里和class文件里,在执行的时候,不会加载到虚拟机中),请注意,当注解未定义Retention值时,默认值是CLASS,如Java内置注解,@Override,@Deprecated,@SuppressWarnning等。使用场景:编译器使用的

  • @Retention(RetentionPolicy.RUNTIME):注解信息将在运行期(JVM)也保留,因此可以通过反射机制读取注解的信息(源码、class文件和执行的时候都有注解的信息),如SpringMvc中的@Controller、@Autowired、@RequestMapping等。使用场景:通过java反射机制获取到此注解中的参数内容,或此注解标注过的对象,用于做不同的业务处理。

因此,自定义注解通常使用在RUNTIME级别。

常用注解说明

JDK的内置注解

  • @override :检测被注解标注的方法是否继承自父接口

  • @Deprecated: 该注解标注的内容已过时

  • @suppressWarings :压制警告

JPA的注解

@Entity

  • @Table

  • @Id

  • @GeneratedValue

  • @Column

Spring的注解

声明bean的注解

  • @Component 组件,没有明确的角色

  • @Service 在业务逻辑层使用(service层)

  • @Repository 在数据访问层使用(dao层)

  • @Controller 在展现层使用,控制器的声明(C)

注入bean的注解

  • @Autowired:由Spring提供

java配置类相关注解

  • @Configuration 声明当前类为配置类,相当于xml形式的Spring配置(类上)

  • @Bean 注解在方法上,声明当前方法的返回值为一个bean,替代xml中的方式(方法上)

  • @Configuration 声明当前类为配置类,其中内部组合了@Component注解,表明这个类是一个bean(类上)

  • @ComponentScan 用于对Component进行扫描,相当于xml中的(类上)

切面(AOP)相关注解

Spring支持AspectJ的注解式切面编程。

  • @Aspect 声明一个切面(类上)

  • 使用@After、@Before、@Around定义建言(advice),可直接将拦截规则(切点)作为参数。

  • @After 在方法执行之后执行(方法上)

  • @Before 在方法执行之前执行(方法上)

  • @Around 在方法执行之前与之后执行(方法上)

  • @PointCut 声明切点

利用工厂模式、代理模式和注解模拟实现spring的IOC、AOP及利用AOP实现记录日志。

IOC

分析:依赖注入是需要在提供Bean之前,将声明的依赖添加到Bean中,因此不能new对象,需要利用工厂模式提供产品。为了保护实际的执行着,采用代理模式,提供产品。声明对象之间的关系可以使用xml等配置文件,也可以使用注解的方式实现,对于注解方式更便捷。

设计:

声明两个注解:

@Component:用于告知哪些Bean使用框架管理。

@Resource:指定需要注入的类型。

提供两个工厂:

BeanFactory:

初始化需要管理的Bean。

提供Bean的产品

ProxyFactory:利用cglib在执行方式前,将需要依赖注入到要执行任务的Bean中。

AOP

分析:在不改变已有程序的前提,指定一个切面。

指定切点,并提供切点执行的顺序。例如在执行前或执行后通知。

设计:

声明注解:

@Aspect:切面

@Before:前通知切点

@After:后通知切点

提供一个工厂

IntercepterFactory:初始化切面及切点。

提供两个管理对象

IntercepterDefine:需要拦截的切面信息。

IntercepterExcuteDefine:在拦截后实际执行的信息。

相关文章

  • JAVA注解Annottation

    注解(Annottation)又叫标注,是从java5开始增加的一种引用数据类型。 Java 8以前,注解只能在声...

  • 菜鸟学服务端技术----Spirng基础

    注解 Java基础加强总结(一)——注解(Annotation) java中的注解是如何工作的? java 注解 ...

  • 自定义注解

    java annotation基础 java注解分为标准注解和元注解。 标准注解是java为我们提供的预定义的注解...

  • Java注解的使用

    Java注解的使用 参考 廖雪峰java教程 使用注解 什么是注解(Annotation)?注解是放在Java源码...

  • Java原生注解和Spring注解的说明

    注解 java 原生注解 Spring 中的注解 一 Java原生注解 Java注解是在JDK1.5以后引入的新特...

  • Java 注解

    JAVA注解 Java 自带注解(系统注解) @Override 表示重写注解 @Deprecated 表示过时的...

  • 1.8 Java 注解annotation

    1.1 注解声明 Java注解Annotation,有声明注解和元注解 元注解:Java提供的元注解,所谓元注解就...

  • Java注解学习总结(脑图)

    注解的提取测试:定义注解: 测试注解提取: 参考:《Java编程思想》java注解

  • Java注解

    Java注解(Annotation)详解(一)——概述及JDK自带注解 Java注解(Annotation)详解(...

  • JAVA-注解 Annotation

    JAVA-注解 Annotation sschrodinger 2018/6/4 基本 注解 Java 注解用于为...

网友评论

      本文标题:JAVA注解Annottation

      本文链接:https://www.haomeiwen.com/subject/tqvrbktx.html