加入AOP标签
<?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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.1.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.1.xsd">
AOP
<aop:config>
<!-- execution中 *代表修饰符, 后面的地址代表调用BookImpl方法就会调用通知中的方法,
其中.*是代表BookImpl中的所有方法,(..)代表包括方法重载,即参数类型不同,id
将会被后边的通知调用-->
<aop:pointcut expression="execution(* com.lanou.book.dao.impl.BookImpl.*(..))" id="pc_userinfo"/>
<!-- aspect 通知标签 id可以随便取,ref表示通知要调用的实例类,
即要在已完成项目功能前后要加入调用的方法其中比如加入的是loginDao -->
<aop:aspect id="userinfoAspect" ref="loginDao">
<!-- 3前置通知
method 表示要调用loginDao中的那个方法 pointcut-ref pointcut中的id-->
<aop:before method="save" pointcut-ref="pc_userinfo"/>
<!-- 4后置通知 -->
<!-- <aop:after method="writeLog" pointcut-ref="pc_userinfo"/> -->
<!-- 5环绕通知 -->
<!-- <aop:around method="save" pointcut-ref="pc_userinfo"/> -->
<!-- <aop:after-returning method=""/> -->
<!-- <aop:after-throwing method=""/> -->
</aop:aspect>
</aop:config>
@Component("bookDao")
public class BookImpl implements BookDao{
@Override
public void save() {
System.out.println("我是测试滴");
}
}
使用前置通知效果如下
method表示要调用loginDao中的那个方法
pointcut-ref 通知标签中的id