java注解

注解: Annotation
作用:主要是用来替代xml的配置文件。
存在的位置:在对应的Java类中
使用的范围:用于修饰包,类,构造器,方法,成员变量,参数和局部变量的声明。
存储形式:key\value形式.
注意:不影响原本的代码执行.
* 注解与XML的区别:
* 注解:
* 优点:
* 直观,简单.
* 配置方式容易.
* 缺点:
* 配置信息相对过于零散.
* 修改过于麻烦(重新编译)
* XML:
* 优点:
* 与Java类逻辑的关系低耦合.
* 复用性.
* 修改很简单(不用编译)
* 缺点:
* 编写过于复杂.
* 解析操作过于复杂.
* Java中提供三个基本注解:
* @Override:限定重写父类方法
* 用处:当一个类继承于另一个类,并重写其提供的方法时.
* @Deprecated:标示已过时
* 作用:保证软件或系统版本更新,对版本的兼容性(新版本只能增加内容,不能修改及删除).
* @SuppressWarnings:抑制编译器警告
* 范围:作用在类、方法、成员变量等.

public class Person {
    public void fun1() {

    }

}
public class FanBingBing extends Person{

    @myanno(addr="beijing",jbo="jiaozhu",name="zhangwuji")
     private int b=0;

        @myanno(addr="beijing",jbo="jiaozhu",name="zhangwuji")
    public void fun1() {
        // TODO Auto-generated method stub
        super.fun1();
    }
        @myanno(addr="YUIKal小区",job="zhangmen",name="zhaomin")
        public void fun2() {

        }


}

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.METHOD,ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface myanno {
     String name();
     String jbo();
     String addr();
}



  • 自定义注解:
    • 使用关键字 @interface.
    • 定义属性:
      • 语法:类型 属性名称();
      • 使用属性时:
        • @注解名称(属性名=属性值,属性名=属性值,…)
    • 一旦自定义注解时,定义属性:一定是必要属性.
    • 支持的类型:基本类型、String、Enum、Class及上述类型的一维数组类型.
      • 注意:
        • 如果自定义注解,只定义value属性(没有任何其他属性)
          String value();
    • 使用该注解时,可以省略”value=”(可以直接指定属性值,而不定义属性名)
      @MyAnno(“”)
  • @Target注解:
    • 作用:
      • 用于修饰自定义注解.
      • 用于指定该自定义注解允许修饰Java类的哪个部分(类、成员变量、方法等).
    • 该注解包含ElementType类型的value属性.
      • @Retention注解:
    • 作用:
      • 用于修饰自定义注解.
      • 指定该自定义注解的生命周期.(生命周期 - SOURCE、CLASS、RUNTIME)
        通过反射读取注解:
    • 前提:自定义注解只能是RUNTIME.
      使用Annotation修饰了类、方法、成员变量等之后,这些Annotation不会自己生效,必须通过相应程序提取并处理Annotation信息。Java提供的Annotation接口是所有注解的父接口,在JDK 5.0新增加AnnotatedElement接口,该接口提供读取运行时Annotation的方法。只有当自定义的Annotation使用了@Retention(RetentionPolicy.RUNTIME)时,该Annotation才会在运行可见,JVM才能读取保存在class文件的Annotation信息。
import java.lang.reflect.Method;

//反射读取Annotation
public class AnnotatedElementTest {
    public static void main(String[] args) throws Exception  
    {
        // 获取对应类的Class对象.
        Class clazz= FanBingBing.class;
        // 获取对应类方法的Method对象.
        Method method= clazz.getMethod("fun2" );
        // 获取类上的注解.
          myanno    anno =  method.getAnnotation(myanno.class);

         //测试
          System.out.println(anno.name());


    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值