java注解

一:概念

注解

   在jdk5之后提供一个特性,和类、接口同级。

  格式:@interface 注解名()

  作用:

    1、编译检查

    2、替代配置文件

    3、定义注解(元注解:注解上的注解。)

java中三个注解

  @override:声明该方法是从父类继承过来的,执行编译期检查。

  @suppressWarning:抑制警告,值有好多,只需要知道一个all。 抑制所有警告。

  @ Deprecated:声明 该方法不赞成使用。

自定义注解:

    注解属性:

      注解属性本质是一个接口,接口中可以有常量和抽象方法。

      抽象方法在注解中就称之为注解属性。

      注意:在接口中抽象方法可以省略public abstract

     注解类型:

      1、String  

      2、Class

      3、Annotation

      4、Enum:枚举

      5、以上类型的对应的一维数组。

      注意:

        一旦注解有属性了,使用注解的时候必须赋值,(除非这个注解属性有默认值)

      赋值格式:
        @注解名(属性名=属性值,属性名=属性值....)

        若注解类型为数组,且只有一个值的时候,可以有两种写法:

          1、属性名={属性值}

          2、属性名=属性值

        若属性名为value的时候,且只需要为这个value属性赋值的时候,vlue可以省略。

元注解:
    定义在注解上的注解:

      @Retention 规定注解保留什么阶段,值为RetentionPolicy的三个枚举值

        SOURCE:只在代码中保留,在字节码中删除。

        CLASS:在代码和字节码中保留。

        RUNTIME:在所有阶段中保留。

      @Target 规定注解作用在什么上面,值为:ElementType的枚举值。

          TYPE:邹勇在类、接口等上面

          METHOD:作用在方法上。

          FIELD :作用在字段上面。

扩展案例:

   之前写jdbc工具类,我们是通过xml文件和properties文件来定义我们的配置文件。这次我们通过注解方式来定义我们的配置文件。

需求分析:

  1、自定义注解,需要注明该注解的知识修饰方法。该注解需要有四个属性,分别为:url  driverclass   username password 我们可以给driverclass设置default值。

  2、工具类中的获取连接的方法(getConnection)。需要:1)需要判断getConnection方法是否含有我们自定注解-->需要获取修饰的方法(getConnection 反射)-->获取字节码。

自定义注解:

 1 package jd.com.an;
 2 
 3 
 4 import java.lang.annotation.ElementType;
 5 import java.lang.annotation.Retention;
 6 import java.lang.annotation.RetentionPolicy;
 7 import java.lang.annotation.Target;
 8 
 9 
10 @Target(ElementType.METHOD)
11 @Retention(RetentionPolicy.RUNTIME)
12 public @interface JdbcInfo {
13     String driverclass()default "com.mysql.jdbc.Driver";
14     String url() default "jdbc:mysql://192.168.147.145:3306";
15     String user();
16     String password();
17 }

工具类:

 1 package jd.com.an;
 2 
 3 
 4 import java.lang.reflect.Method;
 5 import java.sql.Connection;
 6 
 7 import java.sql.DriverManager;
 8 
 9 
10 public class JdbcUtils {
11 
12 
13     private static  Connection con;
14 
15     public static void  main(String... args)throws  Exception{
16         getConnection();
17     }
18 
19     @JdbcInfo(user = "admin",password = "123456")
20     public static Connection getConnection()throws  Exception{
21         //1、获取字节对象。
22         Class clazz=JdbcUtils.class;
23         //2、获取方法
24         Method method=clazz.getMethod("getConnection");
25         //3、判断注解
26         if (method.isAnnotationPresent(JdbcInfo.class)){
27             JdbcInfo jdbcInfo=method.getAnnotation(JdbcInfo.class);
28             String url=jdbcInfo.url();
29             String user=jdbcInfo.user();
30             String password=jdbcInfo.password();
31             String driverclass=jdbcInfo.driverclass();
32             Class.forName(driverclass);
33             con= DriverManager.getConnection(url,user,password);
34             System.out.println(con);
35 
36         }
37         return con;
38     }
39 
40 }
原文地址:https://www.cnblogs.com/evilliu/p/8708013.html