第一步:编写被增强的类:
* ProductDao
第二步:定义切面
第三步:配置applicationContext.xmll
前置通知:
public void before(){
System.out.println("前置通知...");
}
* 配置:
<aop:config>
<!-- 定义切点: -->
<aop:pointcut expression="execution(* cn.spring3.demo2.ProductDao.add(..))" id="mypointcut"/>
<aop:aspect ref="myAspectXML">
<!-- 前置通知 -->
<aop:before method="before" pointcut-ref="mypointcut"/>
</aop:aspect>
</aop:config>
后置通知:
public void afterReturing(Object returnVal){
System.out.println("后置通知...返回值:"+returnVal);
}
* 配置:
<aop:config>
<!-- 定义切点: -->
<aop:pointcut expression="execution(* cn.spring3.demo2.ProductDao.add(..))" id="mypointcut"/>
<aop:aspect ref="myAspectXML">
<!-- 后置通知 -->
<aop:after-returning method="afterReturing" pointcut-ref="mypointcut" returning="returnVal"/>
</aop:aspect>
</aop:config>
环绕通知:
public Object around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable{
System.out.println("环绕前增强....");
Object result = proceedingJoinPoint.proceed();
System.out.println("环绕后增强....");
return result;
}
* 配置:
<aop:config>
<!-- 定义切点: -->
<aop:pointcut expression="execution(* cn.spring3.demo2.ProductDao.add(..))" id="mypointcut"/>
<aop:aspect ref="myAspectXML">
<!-- 前置通知 -->
<!-- <aop:before method="before" pointcut-ref="mypointcut"/> -->
<!-- 后置通知 -->
<!-- <aop:after-returning method="afterReturing" pointcut-ref="mypointcut" returning="returnVal"/> -->
<!-- 环绕通知 -->
<aop:around method="around" pointcut-ref="mypointcut"/>
</aop:aspect>
</aop:config>
异常通知:
public void afterReturing(Object returnVal){
System.out.println("后置通知...返回值:"+returnVal);
}
* 配置;
<aop:config>
<!-- 定义切点: -->
<aop:pointcut expression="execution(* cn.spring3.demo2.ProductDao.add(..))" id="mypointcut"/>
<aop:aspect ref="myAspectXML">
<!-- 异常通知 -->
<aop:after-throwing method="afterThrowing" pointcut-ref="mypointcut" throwing="e"/>
</aop:aspect>
</aop:config>
最终通知:
public void after(){
System.out.println("最终通知....");
}
* 配置:
<aop:config>
<!-- 定义切点: -->
<aop:pointcut expression="execution(* cn.spring3.demo2.ProductDao.add(..))" id="mypointcut"/>
<aop:aspect ref="myAspectXML">
<!-- 最终通知 -->
<aop:after method="after" pointcut-ref="mypointcut"/>
</aop:aspect>
</aop:config>
总结:无论选择注解方式的AspectJ还是使用 Xml的配置方式基本差不多,可以选择其中一个进行熟练掌握,自我感觉xml的配置方便一些。