Java注解

注解的作用就是给代码打标签,是代码的元数据,本身没什么作用,需要结合反射进行处理。

Java内置的3个注解: @Override @Deprecated @SuppressWarnings

还有4种元注解,专门提供注解的创建:
  • @Target 表示该注解可以用于什么地方.可以用的参数包括(可以指定多个,用逗号分隔.调用方法为ElementType.xxx.如果省略这个选项,那么就是可以用于所有地方):
    • CONSTRUCTOR
    • FIELD (包括enum实例)
    • LOCAL_VARIABLE 局部变量
    • METHOD
    • PACKAGE
    • PARAMETER
    • TYPE 类 接口 或enum
  • @Retention 表示需要在什么级别保存该注解信息.可选的RetentionPolicy参数包括:
    • SOURCE 注解将被编译器丢弃
    • CLASS 在class文件中可用,但被jvm丢弃
    • RUNTIME jvm运行器保留注解,所以可通过反射来获取注解的信息
  • @Documented 将此注解包含在javadoc中
  • @Inherited 允许子类继承父类的注解

注解的定义方式很像接口,而且也会编译成class文件.

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Test {}

在注解中一般都会包含一些元素以表示某些值.
注解的元素看起来就像接口中的方法,唯一的区别是你可以为其指定默认值.
没有元素的注解称为标记注解

注解元素可用的类型如下:

  • 所有基本类型
  • String Class enum Annotation(注解可以嵌套).这是一个示例:
    public @interface Uniqueness {
      Constraints constraints() default @Constraints(unique=true);
    }
    
  • 以上类型的数组

注解元素默认值的限制:

  • 如果没有默认值就必须在使用注解时提供元素的值
  • 不能使用null值
定义了注解,声明了注解,还需要定义注解处理器.如果你不处理注解,那么注解他声明也不会做.Java通过反射可以获得注解的信息.

在某些框架如hebernate中,注解比xml配置文件的更好的地方在于:

类名包名已经在Java代码中有了,却还要在配置文件中再描述一次.每当程序员使用外部配置文件时,他就拥有了两个单独的信息源.这经常导致代码同步问题.而且他还要求程序员必须掌握配置文件的编写.
但是也不是绝对的注解就比xml好,注解更适用于业务绑定的服务类.而譬如写SQL这类可能经常会更改的,也许xml会更好一些,以免每改一次sql就重新编译一次Java代码.

快捷方式

@SQLString(30)类似这样的注解,叫做快捷方式.实际上等同于@SQLString(value=30).这样使用是有限制的: 首先必须是value元素,其次只有value元素需要赋值.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值