public class User {
public void add(){
System.out.println("添加");
}
public int num(int a,int b){
int result=a/b;
return result;
}
}
public class Myuser {
public void before(){
System.out.println("前置增强");
}
//后置增强
public void after(){
System.out.println("后置增强");
}
//环绕通知必须携带proceedJoinpoint类型参数 ,该参数可以决定是否执行目标方法
//加上thorws Throwable
//方法是object返回类型
public Object around(ProceedingJoinPoint point) throws Throwable{
//方法前
System.out.println("方法前");
Object obj=point.proceed();//获取目标方法
//方法后
System.out.println("方法后");
return obj;
}
public void deException(Exception e){
System.out.println("异常通知"+e.getMessage());
}
public void returnAfter(Object result){
System.out.println("最终通知"+result);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="https://www.springframework.org/schema/beans"
xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="https://www.springframework.org/schema/aop"
xsi:schemaLocation="https://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
https://www.springframework.org/schema/aop https://www.springframework.org/schema/aop/spring-aop-4.1.xsd">
<!-- 配置bean -->
<bean id="user" class="com.hpe.bean.User"></bean>
<bean id="myuser" class="com.hpe.bean.Myuser"></bean>
<!-- 配置AOP -->
<aop:config>
<!-- 切入点 -->
<aop:pointcut expression="execution(* com.hpe.bean.User.*(..))" id="user1"/>
<!-- 配置切面 -->
<aop:aspect ref="myuser">
<!-- 配置增强的类型 -->
<!-- 前置通知 -->
<aop:before method="before" pointcut-ref="user1"/>
<!-- 后置通知 即使方法是错误的 也会执行-->
<aop:after method="after" pointcut-ref="user1"/>
<!-- 环绕 -->
<aop:around method="around" pointcut-ref="user1"/>
<!-- 异常通知 -->
<aop:after-throwing method="deException" pointcut-ref="user1" throwing="e"/>
<!-- 最终通知 在方法正确时 -->
<aop:after-returning method="returnAfter" pointcut-ref="user1" returning="return"/>
</aop:aspect>
</aop:config>
</beans>