这几天一直在研究aop的问题,发现aop的基础是java的动态代理类,一个例子如下
1.一个接口
2.该接口实现类
3.处理类,类中包括了前置和后置方法
4.测试类
1.一个接口
Java代码
- public interface HelloWorld {
- void sayHelloWorld();
- }
public interface HelloWorld { void sayHelloWorld(); }
2.该接口实现类
Java代码
- public class HelloWorldImpl implements HelloWorld {
- public void sayHelloWorld() {
- System.out.println("Hello World!");
- }
- }
public class HelloWorldImpl implements HelloWorld { public void sayHelloWorld() { System.out.println("Hello World!"); } }
3.处理类,类中包括了前置和后置方法
Java代码
- package proxy;
- imp
ort java.lang.reflect.InvocationHandler; - imp
ort 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!");
- }
- }
package proxy; import java.lang.reflect.InvocationHandler; imp ort 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.测试类
Java代码
- package proxy;
- imp
ort java.lang.reflect.InvocationHandler; - imp
ort 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();
- }
- }