java面向切面编程,动态代理

//转载别人
public interface Hello {

    void sayHello(String to);
  
    void print(String p); 
 
}

public class HelloImpl implements Hello {
    
    public void sayHello(String to) {
        System.out.println("Say hello to " + to);
    }
    
    public void print(String s) {
        System.out.println("print : " + s);
    }
    
}

public class LogHandler implements InvocationHandler {
    
    private Object dele;
    
    public LogHandler(Object obj) {
        this.dele = obj;
    }
    
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        doBefore();
        //在这里完全可以把下面这句注释掉,而做一些其它的事情
        Object result = method.invoke(dele, args);
        after();
        return result;
    }
    
    private void doBefore() {
        System.out.println("before....");
    }
    
    private void after() {
        System.out.println("after....");
    }
}

public class ProxyTest {

    public static void main(String[] args) {
        HelloImpl impl = new HelloImpl();
        LogHandler handler = new LogHandler(impl);
        //这里把handler与impl新生成的代理类相关联
        Hello hello = (Hello) Proxy.newProxyInstance(impl.getClass().getClassLoader(), impl.getClass().getInterfaces(), handler);
        
        //这里无论访问哪个方法,都是会把请求转发到handler.invoke
        hello.print("All the test");
        hello.sayHello("Denny");
    }

}


before....
print : All the test
after....
before....
Say hello to Denny
after....

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值