🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
写一个类,一些类还是用上面的aop的 ~~~ package proxy; import java.lang.reflect.Method; import org.springframework.cglib.proxy.Enhancer; import org.springframework.cglib.proxy.MethodInterceptor; import org.springframework.cglib.proxy.MethodProxy; import service.UserService; import service.UserServiceImpl; public class UserServiceProxyFactory2 implements MethodInterceptor { public UserService getUserServiceProxy() { // 帮我们生成代理对象 Enhancer en = new Enhancer(); // 告诉他被代理对象,设置对谁进行代理 en.setSuperclass(UserServiceImpl.class); // 代理要做什么 en.setCallback(this); // 创建代理对象 UserService us = (UserService) en.create(); return us; } // 第一个参数 被代理原始对象 // 第二个参数 被代理对象的方法 // 第三个参数 运行期参数 // 第四个参数 代理方法对象 @Override public Object intercept(Object proxyobj, Method method, Object[] arg, MethodProxy methodProxy) throws Throwable { // 打开事务 System.out.println("打开事务"); // 调用原有方法 Object returnValue = methodProxy.invokeSuper(proxyobj, arg); // 提交事务 System.out.println("提交事务事务"); return returnValue; } } ~~~ 测试方法 ~~~ @Test public void fun3() { UserServiceProxyFactory2 factory = new UserServiceProxyFactory2(); UserService usProxy = factory.getUserServiceProxy(); usProxy.save(); // 判断代理对象是否属于被代理对象 System.out.println(usProxy instanceof UserServiceImpl); } ~~~