=================== 方法拦截器_其它增强 =================== 1 后置增强 /src/main/java/cn/tedu/proxy/Arround.java: public class Arround implements MethodInterceptor { private Logger logger = Logger.getLogger(Before.class); @Override public Object invoke(MethodInvocation methodInvocation) throws Throwable { Object object = methodInvocation.proceed(); logger.debug("<<<< AFTER INVOKE <<<<"); return object; } } UserServiceImpl.register <<<< AFTER INVOKE <<<< 例程:Proxy 2 环绕增强 /src/main/java/cn/tedu/proxy/Arround.java: public class Arround implements MethodInterceptor { private Logger logger = Logger.getLogger(Before.class); @Override public Object invoke(MethodInvocation methodInvocation) throws Throwable { logger.debug(">>>> BEFORE INVOKE >>>>"); Object object = methodInvocation.proceed(); logger.debug("<<<< AFTER INVOKE <<<<"); return object; } } >>>> BEFORE INVOKE >>>> UserServiceImpl.register <<<< AFTER INVOKE <<<< 例程:Proxy 什么样的增强操作需要在原始方法之前和之后执行? 开启事务 原始方法 提交事务 3 异常增强 还有一些增强操作需要在原始方法抛出异常的时候执行。 public class 方法拦截器 implements MethodInterceptor { @Override public Object invoke(MethodInvocation methodInvocation) throws Throwable { Object object = null; try { Object object = methodInvocation.proceed(); } catch (Throwable throwable) { 在原始方法抛出异常时执行 } return object; } } /src/main/java/cn/tedu/proxy/Arround.java: public class Arround implements MethodInterceptor { private Logger logger = Logger.getLogger(Before.class); @Override public Object invoke(MethodInvocation methodInvocation) throws Throwable { Object object = null; try { logger.debug(">>>> BEFORE INVOKE >>>>"); object = methodInvocation.proceed(); logger.debug("<<<< AFTER INVOKE <<<<"); } catch (Throwable throwable) { throwable.printStackTrace(); } return object; } } /src/main/java/cn/tedu/proxy/UserServiceImpl.java: public class UserServiceImpl implements UserService { ... @Override public void register(User user) { logger.debug("UserServiceImpl.register"); throw new RuntimeException("This is a test exception"); } ... } >>>> BEFORE INVOKE >>>> UserServiceImpl.register This is a test exception 例程:Proxy 增强操作执行的四个时机: - 调用原始方法之前——前置增强 - 调用原始方法之后——后置增强 - 调用原始方法之前和之后——环绕增强 - 原始方法抛出异常——异常增强