一:概念
注解
在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 }