java 的代理有两种实现方式
java 原生代理接口的实现类
import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; /** * 自定义代理增强 * T 为接口 * t 为接口的实现类 */ public class proxyjdk { public <T> T create(final T t) { final Class<?> aClass = t.getClass(); Object o = Proxy.newProxyInstance(aClass.getClassLoader(), aClass.getInterfaces(), new InvocationHandler() { public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { if ("method1".equalsIgnoreCase(method.getName())) { System.out.println("加强开始"); Object invoke = method.invoke(t, args); System.out.println("加强结束"); return invoke; } return method.invoke(t, args); } }); return (T) o; } }
spring 框架 proxycglib 代理一个对象
import org.springframework.cglib.proxy.Enhancer; import org.springframework.cglib.proxy.MethodInterceptor; import org.springframework.cglib.proxy.MethodProxy; import java.lang.reflect.Method; /** * cglib代理增强(直接传入普通对象即可) * t为普通对象 */ public class proxycglib { public <T> T create(final T t) { Object o = Enhancer.create(t.getClass(), new MethodInterceptor() { public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable { if ("method1".equalsIgnoreCase(method.getName())) { System.out.println("方法开始增强"); Object invoke = method.invoke(t, objects); System.out.println("方法增强结束"); return invoke; } return method.invoke(t, objects); } }); return (T) o; } }
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于