首先要引入aop的配置文件 :
xmlns:aop="http://www.springframework.org/schema/aop"
第一种:使用原生spring API接:
<aop:config> <!--切入点(在那个地方执行) expression="execution(要执行的位置)"表达式--> <aop:pointcut id="pointcut" expression="execution(* com.huang.service.UserServiceImpl.*(..))"/> <!--执行环绕增加 (将以下的方法切入到某个位置)--> <aop:advisor advice-ref="Log" pointcut-ref="pointcut"/> <aop:advisor advice-ref="AfterLog" pointcut-ref="pointcut"/> </aop:config>
第二种:自定义类
先写个类里面有方法执行前和方法执行后的方法
public class DiyClass { public void before(){ System.out.println("**********方法执行前***********"); } public void after(){ System.out.println("*********方法执行后*************"); } }
注册该类:
<bean id="diy" class="com.huang.diy.DiyClass"/>
<aop:config> <!--切面--> <aop:aspect ref="diy">将改方法作为切面引入 <!--切入点 UserServiceImpl.*(..):类下的所有方法,所有参数不限--> <aop:pointcut id="point" expression="execution(* com.huang.service.UserServiceImpl.*(..))"/> <!-- 通知 执行那个方法,在那里执行 --> <aop:before method="before" pointcut-ref="point"/> <aop:after method="after" pointcut-ref="point"/> </aop:aspect> </aop:config>
第三种注解实现:
@Aspect//标注这个类是切面 public class Diy2 { @Before("execution(* com.huang.service.UserServiceImpl.*(..))")//该类的所有方法所有的类型 public void before(){ System.out.println("*****diy2方法执行前***********"); } @After("execution(* com.huang.service.UserServiceImpl.*(..)))") public void after(){ System.out.println("************diy2方法执行后**********"); }
然后在xml中注册该类和开启注解:
<bean id="diy2" class="com.huang.diy.Diy2"/> <!--开启注解支持 --> <aop:aspectj-autoproxy/>