/**
* 代理类 cglib 方式
* @author admin
*
*/
public class ProxyCglib implements MethodInterceptor {
private Object obj;
public Object createProxy(Object target) {
this.obj = target;
Enhancer enhancer = new Enhancer();
// 设置被代理对象目标
enhancer.setSuperclass(this.obj.getClass());
// 回调
enhancer.setCallback(this);
enhancer.setClassLoader(target.getClass().getClassLoader());
return enhancer.create();
}
/**
* 在代理实例上处理方法调用并返回结果
*
* @param proxy
* 代理类
* @param method
* 被代理的方法
* @param params
* 该方法的参数数组
* @param methodProxy
*/
public Object intercept(Object proxy, Method method, Object[] params,
MethodProxy methodProxy) throws Throwable {
Object result = null;
// 调用之前
doBefore();
// 调用原始对象的方法
result = methodProxy.invokeSuper(proxy, params);
// 调用之后
doAfter();
return result;
}
private void doBefore() {
System.out.println("before method invoke");
}
private void doAfter() {
System.out.println("after method invoke");
}
}
/**
* 被代理类
* @author admin
*
*/
public class User {
public void jia(){
System.out.println("jia....................");
}
public void cheng(){
System.out.println("cheng..................");
}
}
/**
* 测试类
* @author admin
*
*/
public class Test {
public static void main(String[] args) {
User us = new User();
ProxyCglib py = new ProxyCglib(us);
User u = (User) py.getProxy();
u.jia();
}