/** * 需要被增强功能的类 */ public class UserServiceImpl implements UserService { @Override public void add() { System.out.println("添加一个用户"); } @Override public void del() { System.out.println("删除一个用户"); } @Override public void update() { System.out.println("修改一个用户"); } @Override public void query() { System.out.println("查询一个用户"); } }
public class AfterLog implements AfterReturningAdvice { /** * 如何定位:那个类,那个方法 * @param o 返回值 * @param method 目标方法 * @param objects 参数类型 * @param o1 执行对象 * @throws Throwable */ public void afterReturning(Object o, Method method, Object[] objects, Object o1) throws Throwable { System.out.println("AfterLog 执行方法为:" + method + ",返回值为:" + o); } }
public class BeforeLog implements MethodBeforeAdvice { /** * * @param method 执行目标的方法 * @param objects 方法参数 * @param o 目标 * @throws Throwable */ public void before(Method method, Object[] objects, Object o) throws Throwable { System.out.println("BeforeLog : 那个类:"+o.getClass().getName()+"的,那个方法:"+method.getName()); } }
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> <bean id="beforeLog" class="com.nbg.log.BeforeLog"/> <bean id="afterLog" class="com.nbg.log.AfterLog"/> <bean id="usi" class="com.nbg.service.impl.UserServiceImpl"/> <!--使用原生spring api接口--> <aop:config> <!--execution(修饰词 返回值 类名 方法名 参数)--> <aop:pointcut id="pit" expression="execution(* com.nbg.service.impl.UserServiceImpl.*(..))"/> <!--执行环绕增强 将advice-ref 切入到pointcut-ref中--> <aop:advisor advice-ref="afterLog" pointcut-ref="pit"/> <aop:advisor advice-ref="beforeLog" pointcut-ref="pit"/> </aop:config> </beans>
一:如何在不改动原有代码的基础上,增强其功能?
二:该怎么做?
三:使用代理模式增强被代理对象的功能
原文:https://www.cnblogs.com/NBG-SDL/p/14122681.html