您的位置:首页 > 编程语言 > Java开发

对SpringAop的思考之基于jdk的动态代理

2015-11-22 00:00 459 查看
说道动态代理,我所接触的分为两种:1、基于jdk的动态代理。2、基于cglib的动态代理。上一章说了,子所以会有动态代理,是因为避免静态代理类太多而出现的(我自己是这么理解的)。好了,废话少说,先来看一下基于jdk的动态代理吧。

首先定义一个接口:

public interface Greeting {

public void sayHello(String name);

}

接着,定义实现类:

public class GreetImp implements Greeting{

public void sayHello(String name) {
// TODO Auto-generated method stub
System.out.println("hello"+name);
}

}

我们的目标就是为Greeting接口中的方法进行拦截。

我们开始写我们的动态代理类:

public class DyemJdkProxy implements InvocationHandler{

private Object obj;
public DyemJdkProxy(Object obj)
{
this.obj=obj;
}

public <T> T getProxy()
{
return (T) Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this);
}

public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
// TODO Auto-generated method stub
Object result;
System.out.println("方法前");
result=method.invoke(obj, args);
System.out.println("方法后");
return result;
}

}

就这样,我们完成了基于jdk的动态代理类的代码。。。这个代理类可以代理接口为Greeting的所以实现类了。

public static void main(String[] args) {
GreetImp greetImp=new GreetImp();
Greeting g=new DyemJdkProxy(greetImp).getProxy();
g.sayHello("小明");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java aop