使用CGLIB 第三方代理
CGLIB(Code Generation Library)是一个开源项目
CGLIB和JDK动态代理一样都是动态代理,但是CGLIB代理没有接口可以进行代理
CGLIB代理没有接口的类,在JVM动态的为这个代理创建一个子类,子类重写父类方法,并且调用父类方法,在父类方法执行之前,之后,异常,最终做增强
Spring默认已经集成CGLIB代理,直接可以使用即可,不用拷贝任何jar包
案例代码
在我们的UserServiceImpl的实现类中,使用CGLIB的动态代理,进行方法的增强,增强事物的功能
CGLIB代理类
public class CglibProxyHandler {
//被代理的对象
private Object target;
//事务管理器
private TransactionManagerHandler txManager;
/**
* 返回一个代理对象,代理对象就做了方法的增强,(事物管理,日志控制,权限管理等等)
* @return
*/
public <T> T getProxyObject(Class<T> clz) {
//使用CGLIB代理,CGLIB代理 可以没有接口,直接使用类代理
//创建Enhancer CGLIB代理对象
Enhancer enhancer = new Enhancer();
//设置类加载器
enhancer.setClassLoader(this.getClass().getClassLoader());
//设置被代理对象字节码
enhancer.setSuperclass(target.getClass())