cglib 动态代理

来源:互联网 发布:阿里云个人免费套餐 编辑:程序博客网 时间:2024/05/22 07:50

cglib原理动态创建代理类的子类, 复制里面的方法实现方法的代理, 但是final 修是的类, 方法无法实现代理


package com.example.cglib;public class BookService{public void print() {System.out.println("thinking in java");}}

package com.example.cglib;import java.lang.reflect.Method;import org.assertj.core.internal.cglib.proxy.Enhancer;import org.assertj.core.internal.cglib.proxy.MethodInterceptor;import org.assertj.core.internal.cglib.proxy.MethodProxy;import org.slf4j.Logger;import org.slf4j.LoggerFactory;public class CglibProxy implements MethodInterceptor {private static final Logger logger = LoggerFactory.getLogger(CglibProxy.class);private Object target;public  Object getProxyInstance(Object target){this.target = target;Enhancer enhance = new Enhancer();enhance.setSuperclass(target.getClass());enhance.setCallback(this);enhance.setClassLoader(this.getClass().getClassLoader());return enhance.create();}@Overridepublic Object intercept(Object proxy, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {Object result = methodProxy.invokeSuper(proxy, args);//methodProxy.invoke(proxy, args);logger.info("target: "+ target.getClass().getName());return result;}public static void main(String[] args) {CglibProxy cglib = new CglibProxy();BookService service = (BookService) cglib.getProxyInstance(new BookService());service.print();}}


0 0
原创粉丝点击