Java元注解,简单案例
Posted oldmonk
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 }
打印结果
注解的简单用法就记这么多了,更深入的研究待以后来搞
以上是关于Java元注解,简单案例的主要内容,如果未能解决你的问题,请参考以下文章