}
带有属性的注解:
@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.2.2.2 步骤分析:
定义一个测试类
public class AnnotationDemo3 {br/>@MyTest
public void demo1(){
System.out.println("demo1执行了...");
}
@MyTest
public void demo2(){
System.out.println("demo2执行了...");
}
public void demo3(){
System.out.println("demo3执行了...");
}
元注解也是一个注解:修饰注解的 注解.
自定义一个注解:
核心运行类:
public class CoreRunner {
public static void main(String[] args) {
// 反射:获得类的字节码对象.Class
Class clazz = AnnotationDemo3.class;
// 获得测试类中的所有的方法:
Method[] methods = clazz.getMethods();
// 遍历数组:
for (Method method : methods) {
// System.out.println(method.getName());
// 判断方法上是否有@MyTest注解:
boolean flag = method.isAnnotationPresent(MyTest.class);
// System.out.println(method.getName()+" "+flag);
if(flag){
// 让这个方法执行:
try {
method.invoke(clazz.newInstance(), null);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
1.2.4 总结:
使用注解完成JDBC工具类的编写:(了解)
public class JDBCUtils {
private static String driverClass;
private static String url;
private static String username;
private static String password;
@JDBCInfo
public static Connection getConnection() throws Exception{
// 反射:
Class clazz = JDBCUtils.class;
Method method = clazz.getMethod("getConnection", null);
// 获得方法上的注解:
JDBCInfo jdbcInfo = method.getAnnotation(JDBCInfo.class);
driverClass = jdbcInfo.driverClass();
url = jdbcInfo.url();
username = jdbcInfo.username();
password = jdbcInfo.password();
Class.forName(driverClass);
Connection conn = DriverManager.getConnection(url, username, password);
return conn;
}
}
原文:http://blog.51cto.com/13517854/2124960