java 注解入门 简书_Java 注解入门

注解 VS xml

XML 以松耦合的方式完成了框架中几乎所有的配置。但是随着项目越来越大, XML内容也越来越复杂,维护成本越来越高

注解是一种高耦合的配置方式,可以在几乎所有的需要配置地方使用注解

什么时候使用XML

项目内部达成一致约定的配置

注解无法实现,或者无法轻易实现的情况

注解分类

JAVA内置注解

@Override,@Deprecated,@SuppressWarnings(),在编译期起作用。

自定义注解

程序员自己定义的注解

元注解

用来定义注解的注解

自定义注解

@Target(ElementType.TYPE)

@Retention(RetentionPolicy.RUNTIME)

public @interface TestAnnotation {

public int id() default 1;

public String msg() default "hello";

}

其中使用@interface声明自定义注解。字段描述和Java的接口声明类似。

@Target

表示注解作用的地方

ElementType.ANNOTATION_TYPE 给注解进行注解

ElementType.CONSTRUCTOR 给构造方法进行注解

ElementType.FIELD给属性进行注解

ElementType.LOCAL_VARIABLE 给局部变量进行注解

ElementType.METHOD 给方法进行注解

ElementType.PACKAGE 给包进行注解

ElementType.PARAMETER 给方法内参数进行注解

ElementType.TYPE 给一个类型进行注解,比如类、接口、枚举

@Retention

代表这个注解的存活时间

RetentionPolicy.SOURCE

存在源码阶段,编译器进行编译时它将被丢弃忽视

RetentionPolicy.CLASS

中保留都编译进行时,它不会被加载到 JVM 中

RetentionPolicy.RUNTIME

注解可以保留到程序运行时候,它会加载到JVM中,所以程序运行时可以获取他们。

注解提取

注解通过反射获取

Class demoClass = Class.forName("com.aliware.mamba.annotation.Demo");

boolean hasAnnotation = demoClass.isAnnotationPresent(TestAnnotation.class);

if(hasAnnotation) {

DankunAnnotation dankunAnnotation = (DankunAnnotation) demoClass.getAnnotation(TestAnnotation.class);

System.out.println(dankunAnnotation.id());

System.out.println(dankunAnnotation.msg());

}

总结

注解相当于只是打了一个标签,如果没有解析它的代码,它可能连注释都不如。

解析一个类或者方法的注解往往有两种形式:

编译期间直接扫描

运行期间反射

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值