相比JDK动态代理,无需提供接口即可使用
1.创建待代理类
public class SayHelloImpl {
public void sayHello() {
System.out.println("Hello");
}
}
2.创建代理类
public class CGLIB implements MethodInterceptor {
/**
* 生成CGLIB代理对象
* @param cls ------Class类
* @return Class类的CGLIB 代理对象
*/
public Object getProxy(Class cls){
//CGLIB enhancer 增强类对象
Enhancer enhancer = new Enhancer();
//设置增强类型
enhancer.setSuperclass(cls);
//定义代理逻辑对象为当前对象,要求当前对象实现Method Interceptor方法
enhancer.setCallback(this);
//生成并返回代理对象
return enhancer.create();
}
/**
* 代理逻辑方法
* @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 resultObj = methodProxy.invokeSuper(o,objects);
System.out.println("调用后");
return resultObj;
}
//测试
public static void main(String[] arg){
CGLIB cglib = new CGLIB();
SayHelloImpl sayHello = (SayHelloImpl)cglib.getProxy(SayHelloImpl.class);
sayHello.sayHello();
}
}