针对没有实现接口的目标对象进行代理
原理:生成目标对象的子类,子类中覆盖父类的方法
需要支持cglib的jar文件
本例中使用spring中提供的相关类
//实现方法拦截器接口
public class BookProxy implements MethodInterceptor{
//目标对象
private Object target;
public Object bind(Object target){
this.target = target;
//增强类
Enhancer en = new Enhancer();
//设置父类
en.setSuperclass(this.target.getClass());
//设置回调
en.setCallback(this);
//创建代理对象
return en.create();
}
@Override
public Object intercept(Object proxy, Method arg1, Object[] arg2, MethodProxy methodProxy) throws Throwable {
// TODO Auto-generated method stub
System.out.println("调用方法前");
System.out.println("Method:" + arg1.getName());
System.out.println("Method:" + methodProxy.getSuperName());
//调用目标的方法(父类的方法)
Object ret= methodProxy.invokeSuper(proxy, arg2);
System.out.println("调用方法后");
return ret;
}
}
网友评论