java之动态代理
程序员文章站
2022-06-09 21:13:09
...
手写个AOP压压惊
PS:AOP的拦截功能是由java中的动态代理来实现的。说白了,就是在目标类的基础上增加切面逻辑,生成增强的目标类
1、创建接口:
public interface Ijk {
public String showName(String name) ;
}
2、创建实现类
public class IjkImpl implements Ijk {
public String showName(String name) {
System.out.println("-------名字是:"+name+"-------");
return name;
}
}
3、创建代理对象 --实现InvocationHandler接口
public class DTDL implements InvocationHandler{
private Object obj; //将要被代理的对象
public DTDL(Object obj) {
this.obj=obj;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("----代理方法前补充---"+method.getName());
method.invoke(this.obj, args); //执行并获得返回值
System.out.println("----代理方法后补充---");
return null;
}
}
4、测试类
public static void main(String[] args) throws Exception {
Ijk jk=new IjkImpl(); //创建对象jk
DTDL dt=new DTDL(jk); //创建代理对象,将jk填进去
Ijk jk2=(Ijk)Proxy.newProxyInstance(jk.getClass().getClassLoader(),
jk.getClass().getInterfaces(),dt);
//创建jk的代理对象,
//参数分别为[jk类型.getClassLoader(),jk类型.getInterfaces(),代理对象]
ww2.showName("张三");
}
输出:
----代理方法前补充---showName
-------名字是:张三-------
----代理方法后补充---