按照来源注解
java自带的注解
@override
@SuppressWarnings
@Deprecated
第三方的注解
mybatis的注解
@Test
自定义注解
元注解
给注解标示注解
@Target(value={ElementType.TYPE,ElementType.METHOD,ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface Hemi {
String value();
int num=100;
}
@Target指定注解可以放置的位置
ElementType.TYPE:放在类上
ElementType.METHOD:放在方法上
ElementType.FIELD:放在字段上
@Retention:指定注解在什么时候有用
RetentionPolicy.RUNTIME:运行时有用
RetentionPolicy.CLASS:编译时有用
RetentionPolicy.RESOURCE:源文件有用
@Inherited:表示可继承
得到注解的内容
Class<?> clazz=MyHemi.class;
Hemi annotation = clazz.getAnnotation(Hemi.class);
String value = annotation.value();
Method method = clazz.getMethod("insert");
Hemi annotation2 = method.getAnnotation(Hemi.class);
String value2 = annotation2.value();
System.out.println(value);
System.out.println(value2);
注解的作用
1.传递数据
2.标记
jdk动态代理
1.被代理类必须实现一个接口
public class Student implements Runnable{
@Override
public void run() {
System.out.println("跑步");
try {
Thread.sleep(2000);
} catch (Exception e) {
e.printStackTrace();
}
}
}
2.创建一个类实现InvocatiobHandler接口,该类用来对象代理对象进行方法的增强
public class TimeUntil implements InvocationHandler{
//将对象传入进来
public Object target;
public TimeUntil(Object target){
this.target=target;
}
}
3.通过Proxy.newProxyInstance(ClasLoader, Class, InvovationHandler)来创建代理类对象并调用代理对象的方法
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
long time1 = System.currentTimeMillis();
method.invoke(target, args);
long time2 = System.currentTimeMillis();
System.out.println(time2-time1);
return null;
}