Java元注解

    • 【注解】

程序中有 注释 和注解

* 注释:给开发人员.

* 注解:给计算机看的.

 

    注解使用:学习框架支持注解开发.

    • JDK提供的注解】

@Override :描述方法的重写.

@SuppressWarnings :压制警告.

@Deprecated :标记过时.

    • 自定义注解:

定义一个类:class

定义一个借口:interface

定义一个枚举:enum

定义一个注解:@interface

    用法:

 

@interface MyAnno1{
    
}

带有属性的注解:
@interface MyAnno2{
    int a() default 1;
    String b();
    // 注解属性的类型:基本数据类型,字符串类型String,Class,注解类型,枚举类型,以及以上类型的一维数组.
    // Date d();
    Class clazz();
    MyAnno3 m3(); // 注解
    Color c(); // 枚举
    String[] arrs();
    
}

@MyAnno4("aaa") // 如果属性名称为value 那么使用的时候 value可以省略(只出现这一个value的属性情况下).
public class AnnotationDemo3 {

}

@interface MyAnno4{
    String value();
    int a() default 1;
}

 

【自定义注解案例】

  注解类

 1 package com.xujingyang.annotation;
 2 
 3 import java.lang.annotation.ElementType;
 4 import java.lang.annotation.Retention;
 5 import java.lang.annotation.RetentionPolicy;
 6 import java.lang.annotation.Target;
 7 
 8 //保留到运行时
 9 @Retention(RetentionPolicy.RUNTIME)
10 //只能作用在方法上
11 @Target(ElementType.METHOD)
12 public @interface MyTest {
13     
14 }

测试注解类

 1 package com.xujingyang.annotation;
 2 
 3 public class Test {
 4     @MyTest
 5     public void f1(){
 6         System.out.println("f1方法执行了~~~~");
 7     }
 8     
 9     public void f2(){
10         System.out.println("f2方法执行了~~~~");
11     }
12     
13     @MyTest
14     public void f3(){
15         System.out.println("f3方法执行了~~~~");
16     }
17 }

主测试类

 1 package com.xujingyang.annotation;
 2 
 3 import java.lang.reflect.Method;
 4 
 5 public class Main {
 6     public static void main(String[] args) throws Exception{
 7         Class clazz=Test.class;
 8         
 9         Method[] methods = clazz.getMethods();
10         for (Method method : methods) {
11 //            method.invoke(clazz.newInstance());
12 //            System.out.println(method.getName());
13             boolean b = method.isAnnotationPresent(MyTest.class);//判断是否有添加此注解
14             if(b){
15                 method.invoke(clazz.newInstance());
16             }
17         }
18     }
19 }

打印结果

案例二,使用注解方式加载获取JDBC连接的参数

  注解类

 1 package com.xujingyang.jdbc;
 2 
 3 import java.lang.annotation.ElementType;
 4 import java.lang.annotation.Retention;
 5 import java.lang.annotation.RetentionPolicy;
 6 import java.lang.annotation.Target;
 7 //保留到运行时
 8 @Retention(RetentionPolicy.RUNTIME)
 9 //只能在方法上添加此注解
10 @Target(ElementType.METHOD)
11 public @interface JDBCInfo {
12     //定义加载数据库的几种属性,可以用default关键字赋默认值
13     String DriverClass() default "com.mysql.jdbc.Driver";
14     String Url();
15     String User() default "root";
16     String Pwd() default "root";
17 }

 测试类

 1 package com.xujingyang.jdbc;
 2 
 3 import java.lang.reflect.Method;
 4 import java.sql.Connection;
 5 import java.sql.DriverManager;
 6 
 7 public class Conn {
 8     public static void main(String[] args) throws Exception {
 9         System.out.println(getConnection());//打印连接地址,说明成功
10     }
11     
12     @JDBCInfo(Url="jdbc:mysql://localhost:3306/day16")
13     public static Connection getConnection() throws Exception{
14         //加载类的字节码对象
15         Class<Conn> clazz=Conn.class;
16         
17         //获取此方法
18         Method method = clazz.getMethod("getConnection");
19         
20         //获取注解对象
21         JDBCInfo info = method.getAnnotation(JDBCInfo.class);
22         
23         //获取各个已赋值的属性
24         String driverClass = info.DriverClass();
25         String url = info.Url();
26         String user = info.User();
27         String pwd = info.Pwd();
28         
29         //注册驱动
30         Class.forName(driverClass);
31         
32         //获得连接
33         return DriverManager.getConnection(url, user, pwd);
34     }
35 }

打印结果

注解的简单用法就记这么多了,更深入的研究待以后来搞


作者:oldmonk
出处:www.jingyangxu.cn
作者简介:oldmonk,俗称:老徐。
请记住:你比他好一点,他不会承认你,反而会嫉妒你,只有你比他好很多,他才会承认你,然后还会很崇拜你,所以要做,就一定要比别人做得好很多!
我的个人微信号:dongfengyang ,欢迎大家找我聊天,记录你我的故事。

本文如对您有帮助,记得点击右边跳动小球【赞一下】 n(*≧▽≦*)n
如果喜欢我的文章,可关注我的公众号哦

原文地址:https://www.cnblogs.com/xujingyang/p/6591813.html