企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
[TOC] 先写个接口 ~~~ package service; public interface UserService { void save(); void delete(); void update(); void find(); } ~~~ 再写接口的实现类 ~~~ package service; public class UserServiceImpl implements UserService { @Override public void save() { System.out.println("保存用户"); } @Override public void delete() { System.out.println("删除用户"); } @Override public void update() { System.out.println("更新用户"); } @Override public void find() { System.out.println("查找用户"); } } ~~~ aop实现 ~~~ package proxy; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import service.UserService; import service.UserServiceImpl; public class UserServiceProxyFactory implements InvocationHandler { private UserService us; public UserServiceProxyFactory(UserService us) { super(); // 必须要这个对象,因为method.invoke要用 this.us = us; } // 获得代理对象 public UserService getUserviceProxy() { // 生成动态代理 // 第一个参数类加载器 // 第二个参数把被代理对象实现的接口给他 // 第三个参数,表示你这个代理要怎么增强 UserService usProxy = (UserService) Proxy.newProxyInstance(UserServiceProxyFactory.class.getClassLoader(), UserServiceImpl.class.getInterfaces(), this); return usProxy; } // 第一个参数,会把当前代理对象传给你 // 第二个参数,当前执行的方法传给你 // 第三个参数,当前方法的参数传给你 @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // 前置增强的 System.out.println("打开事务"); // 本来的方法 Object invoke = method.invoke(us, args); // 后置增强 System.out.println("提交事务"); return invoke; } } ~~~ 测试下 ~~~ @Test public void fun3() { UserService us = new UserServiceImpl(); UserServiceProxyFactory factory = new UserServiceProxyFactory(us); UserService usProxy = factory.getUserviceProxy(); usProxy.save(); } ~~~