0、可以代理没有接口的实现类
1、被代理类
/**
* 被代理类
*/
public class Cat {
public void cry() {
System.out.println("喵喵喵");
}
}
2、实现MethodInterceptor接口
import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;
import java.lang.reflect.Method;
/**
* 实现MethodInterceptor接口
*/
public class CatMethodInterceptor implements MethodInterceptor {
/**
* 生成方法拦截器
* @param o 要进行增强的对象
* @param method 拦截的方法
* @param objects 参数列表
* @param methodProxy 方法的代理
* @return
* @throws Throwable
*/
@Override
public Object intercept(Object o, Method method,
Object[] objects, MethodProxy methodProxy) throws Throwable {
System.out.println("——————调用前处理——————");
//对被代理对象方法的调用
Object object = methodProxy.invokeSuper(o, objects);
System.out.println("——————调用后处理——————");
return object;
}
}
3、测试
import org.springframework.cglib.proxy.Enhancer;
/**
* 测试Cglib
*/
public class CglibDynamicProxyDemo {
public static void main(String[] args) {
Enhancer enhancer = new Enhancer();
//被代理类:Cat
enhancer.setSuperclass(Cat.class);
//设置回调
enhancer.setCallback(new CatMethodInterceptor());
//生成代理对象
Cat cat = (Cat) enhancer.create();
//调用代理类的方法
cat.cry();
}
}
4、运行结果
——————调用前处理——————
喵喵喵
——————调用后处理——————
来源:oschina
链接:https://my.oschina.net/u/3777515/blog/3158726