public class App { public static void main(String[] args) { UserService userService = UserServiceCglibProxy.createUserServiceCglibProxy(UserServiceImpl.class); userService.save(); } }
public class UserServiceCglibProxy { public static UserService createUserServiceCglibProxy(Class clazz){ //创建Enhancer对象(可以理解为内存中动态创建了一个类的字节码) Enhancer enhancer = new Enhancer(); //设置Enhancer对象的父类是指定类型UserServerImpl enhancer.setSuperclass(clazz); //设置回调方法 enhancer.setCallback(new MethodInterceptor() { public Object intercept(Object o, Method method, Object[] args, MethodProxy methodProxy) throws Throwable { //通过调用父类的方法实现对原始方法的调用 Object ret = methodProxy.invokeSuper(o, args); //后置增强内容,与JDKProxy区别:JDKProxy仅对接口方法做增强,cglib对所有方法做增强,包括Object类中的方法 if(method.getName().equals("save")) { System.out.println("刮大白3"); System.out.println("贴墙纸3"); } return ret; } }); //使用Enhancer对象创建对应的对象 return (UserService) enhancer.create(); } }
标签:Enhancer,enhancer,args,Object,Cglib,AOP,UserService,public,底层 From: https://www.cnblogs.com/weiduaini/p/17305331.html