通过使用spring的aop,反过来查看了一下java的反射机制和注释功能
一、反射:
设计到的java类包括:Class,Constructor,Field,Method,Proxy,InvocationHandler接口
Class:java实例对象所属的类
Constructor: java类的构造方法
Field:java类的属性。可以获取所有属性名称、修饰符等内容
Method:java类的行为操作(方法),可以获取所有方法名称、修饰符及进行方法调用(method.invoke(object,obj[]))
Proxy:生成代理类
InvocationHandler接口:实现代理类方法执行时,业务处理操作。可以在指定的方法执行前、后的位置,添加相应的业务逻辑操作。
Proxy.newProxyInstance(classLoader,interfaces,handler);
一般使用接口+接口实现类+业务逻辑方式实现:在方法执行前后位置添加特殊处理逻辑等操作
接口:为代理生成对象类别
接口实现类:为handler中方法执行绑定对象
业务逻辑:可以在handler中实现
二、注释
声明注释:
@Retention(value=RetentionPolicy.RUNTIME)//指定运行时有效
@Target(value=ElementType.METHOD)//绑定方法注释
public @interface AnnoTest{
public abstract value();//注释使用的参数
}
标记注释:
public class Test{
@AnnoTest(value="annotation test...")
public void test(){
}
}
调用注释:
public static void main(String[] args){
Method[] mds = Test.class.getDeclaredMethods();
for(int i = 0;i < mds.length;i++){
Method md = mds[i];
String vl = md.getAnnotation(AnnoTest.class) .value()
}
}
附注:java反射详解参考:
http://java.sun.com/developer/technicalArticles/ALT/Reflection/