ot;myXmlAspect">
-->
<!-- 选择通知的类型,前置通知
<aop:before method="log" pointcut="execution(public void com.baidu.demo1.UserServiceImpl.save())"/>
</aop:aspect>
</aop:config>
-->
<!-- 配置AOP的增强 -->
<aop:config>
<!-- 编写切入点的表达式 -->
<aop:pointcut expression="execution(public void com.baidu.demo1.UserServiceImpl.save())" id="pt"/>
<aop:aspect ref="myXmlAspect">
<aop:before method="log" pointcut-ref="pt"/>
</aop:aspect>
</aop:config>
<!--
切入点的表达式:
execution() 固定写法
public 可以省略不写
void 方法的返回值,可以写 * 号
包结构 也可以 * 号,不能省略不写
UserServiceImpl 类,可以编写 * 号,常见的编写的写法:*ServiceImpl
方法 可以编写*号 save* saveUser saveDept
参数列表 编写.. 指的可变参数
需求:对项目中的service的save方法进行增强
execution(public * com.baidu.*.*ServiceImpl.3save*(..))
-->
<aop:config>
<!-- <aop:pointcut expression="execution(public void com.baidu.demo1.UserServiceImpl.update())" id="pt"/> -->
<!-- <aop:pointcut expression="execution(void com.baidu.demo1.UserServiceImpl.save())" id="pt"/> -->
<!-- <aop:pointcut expression="execution(* com.baidu.demo1.UserServiceImpl.save())" id="pt"/> -->
<!-- <aop:pointcut expression="execution(* com.baidu.*.UserServiceImpl.save())" id="pt"/> -->
<!-- <aop:pointcut expression="execution(* com.baidu.*.*ServiceImpl.save())" id="pt"/> -->
<!-- <aop:pointcut expression="execution(* com.baidu.*.*ServiceImpl.save*())" id="pt"/> -->
<aop:pointcut expression="execution(* com.baidu.*.*ServiceImpl.save*(..))" id="pt"/>
<aop:aspect ref="myXmlAspect">
<aop:before method="log" pointcut-ref="pt"/>
</aop:aspect>
</aop:config>
<!-- 配置AOP的增强 -->
<aop:config>
<!-- 编写切入点的表达式 -->
<aop:pointcut expression="execution(public void com.baidu.demo1.UserServiceImpl.save())" id="pt"/>
<aop:aspect ref="myXmlAspect">
<!-- 前置通知
<aop:before method="log" pointcut-ref="pt"/>
-->
<!-- 后置通知:目标对象方法执行成功后,通知方法才执行
<aop:after-returning method="log" pointcut-ref="pt"/>
-->
<!-- 异常通知:目标对象方法出现异常后,通知执行
<aop:after-throwing method="log" pointcut-ref="pt"/>
-->
<!-- 最终通知:目标对象方法执行成功或失败,都会执行
<aop:after method="log" pointcut-ref="pt"/>
-->
<!-- 环绕通知:在目标对象方法执行前后去增强,问题,默认捕获目标对象的方法,手动让目标对象的方法执行 -->
<aop:around method="around" pointcut-ref="pt"/>
</aop:aspect>
</aop:config>
</beans>
import javax.annotation.Resource;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith |