0
点赞
收藏
分享

微信扫一扫

AOP动态代理实例


AOP动态代理实例

package test.aop;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

interface Human{
void info();

void fly();
}

//被代理类
class SuperMan implements Human{
@Override
public void info() {
System.out.println("我是超人!我怕谁!");
}
@Override
public void fly() {
System.out.println("I believe I can fly!");
}
}

class HumanUtil{
public void method1(){
System.out.println("--------方法一-----------");
}

public void method2(){
System.out.println("--------方法二--------------");
}
}


class MyInvocationHandler implements InvocationHandler{

//被代理类的对象声明
Object obj;
public void setObject(Object obj){
this.obj = obj;
}

@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

HumanUtil h = new HumanUtil();
h.method1();

Object returnVal = method.invoke(obj, args);

h.method2();
return returnVal;
}
}

//动态的创建一个代理类的对象
class MyProxy{

public static Object getProxyInstance(Object obj){
MyInvocationHandler handler = new MyInvocationHandler();
handler.setObject(obj);

return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), handler);
}
}



public class TestAOP {
public static void main(String[] args) {
//创建了一个被代理类的对象
SuperMan man = new SuperMan();
//返回一个代理类的对象
Object obj = MyProxy.getProxyInstance(man);
Human hu = (Human)obj;
//通过代理类的对象调用重写的抽象方法
hu.info();

System.out.println();

hu.fly();
}
}

//结果如下
--------方法一-----------
我是超人!我怕谁!
--------方法二--------------

--------方法一-----------
I believe I can fly!
--------方法二--------------


举报

相关推荐

0 条评论