import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
import java.lang.reflect.Method;
public class T000_Aop_02_cglib {
public static class CglibProxy implements MethodInterceptor {
private Enhancer enhancer = new Enhancer();
public <T> T getProxy(Class<T> clazz) {
// 设置需要创建的子类的类
enhancer.setSuperclass(clazz);
enhancer.setCallback(this);
// 通过字节码动态创建子类实例
return (T) enhancer.create();
}
@Override
public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
System.out.println(method.getName() + " before");
Object ret = methodProxy.invokeSuper(o, objects);
System.out.println(method.getName() + " after");
return ret;
}
}
public static class Service {
public void doService() {
System.out.println("doService");
}
}
/**
* 通过动态生成子类的方式创建代理类
* @param clazz
* @param <T>
* @return
*/
public static <T> T getProxy(Class<T> clazz) {
CglibProxy proxy = new CglibProxy();
return proxy.getProxy(clazz);
}
public static void main(String[] args) {
Service service=getProxy(Service.class);
service.doService();
}
}
spring aop 000 : cglib
最新推荐文章于 2024-08-10 22:29:03 发布