这几天一直在研究aop的问题,发现aop的基础是java的动态代理类,一个例子如下
1.一个接口
2.该接口实现类
3.处理类,类中包括了前置和后置方法
4.测试类
1.一个接口
public interface HelloWorld {
void sayHelloWorld();
}
2.该接口实现类
public class HelloWorldImpl implements HelloWorld {
public void sayHelloWorld() {
System.out.println("Hello World!");
}
}
3.处理类,类中包括了前置和后置方法
package proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class HelloWorldHandler implements InvocationHandler {
// 要代理的原始对象
private Object objOriginal;
/**
** 构造函数
*/
public HelloWorldHandler(Object obj) {
this.objOriginal = obj;
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
Object result;
// 方法调用之前
doBefore();
//调用原始对象的方法
result = method.invoke(this.objOriginal ,args);
//方法调用之后
doAfter();
return null;
}
private void doBefore()
{
System.out.println("before method invoke!");
}
private void doAfter()
{
System.out.println("after method invoke!");
}
}
4.测试类
package proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
HelloWorld hw=new HelloWorldImpl();
InvocationHandler handler=new HelloWorldHandler(hw);
//创建动态代理对象
HelloWorld proxy = (HelloWorld) Proxy.newProxyInstance(
hw.getClass().getClassLoader(),
hw.getClass().getInterfaces(),
handler);
proxy.sayHelloWorld();
}
}