zoukankan      html  css  js  c++  java
  • 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
    如果喜欢我的文章,可关注我的公众号哦

  • 相关阅读:
    7A
    map最最最基本用法
    cccc超级酱油心得
    scu-4445
    初学算法之广搜
    初学算法之最基础的stl队列
    初学算法之筛选素数法
    go 虎牙爬取
    php使用xpath爬取内容
    go xpath
  • 原文地址:https://www.cnblogs.com/xujingyang/p/6591813.html
Copyright © 2011-2022 走看看