切点
User
每个方法看成一个切点
package com.bjsxt.pojo;
import org.springframework.stereotype.Component;
public class User {
public void a(){
/*int a =10/0;*/
System.out.println("--我是方法A-");
}
public void b(String z){
int a =5/0;
System.out.println("--我是方法B-");
}
public void c(){
System.out.println("--我是方法C-");
}
}
通知代码
public class AspectJAdvice {
//前置通知方法
public void beforAd(JoinPoint joinPoint){
System.out.println("前置通知");
}
//后置通知方法
public void afterAd(){
System.out.println("后置通知");
}
//环绕通知方法
public Object aroundAd(ProceedingJoinPoint point) throws Throwable{
System.out.println("环绕通知--前");
Object o = point.proceed();
System.out.println("环绕通知--后");
return o;
}
//异常通知方法
public void throwsAd(){
System.out.println("异常通知");
}
}
配置代码
<?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"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
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
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<bean id="us" class="com.bjsxt.pojo.User"></bean>
<!--配置通知类的对象-->
<bean id="aps" class="com.bjsxt.advice.AspectJAdvice"></bean>
<aop:config>
<aop:aspect ref="aps">
<aop:pointcut id="pt" expression="execution(* com.bjsxt.pojo.User.a())"></aop:pointcut>
<!--给切点增加对应的通知-->
<aop:before method="beforAd" pointcut-ref="pt"></aop:before>
<!--无论切点中方法是否有异常,这个后置通知都会执行,相当于在动态jdk代理的finally后-->
<aop:after method="afterAd" pointcut-ref="pt"></aop:after>
<!--只有切点中的方法没有异常的时候才会执行这个通知-->
<!--<aop:after-returning method="afterAd" pointcut-ref="pt"></aop:after-returning>
-->
<aop:around method="aroundAd" pointcut-ref="pt"></aop:around>
<aop:after-throwing method="throwsAd" pointcut-ref="pt"></aop:after-throwing>
</aop:aspect>
</aop:config>
</beans>