1 要执行的普通方法
package com.zxf.demo;
public class Demo1 {
public void d1(){
System.out.println("d1()方法。。。。");
}
}
2 定义环绕通知的相关类
package com.zxf.advice;
import org.aspectj.lang.ProceedingJoinPoint;
public class MyAdvice {
public void mybeofre(){
System.out.println("前置........");
}
public void myafter(){
System.out.println("后置........");
}
public void mythrow(){
System.out.println("环绕异常通知");
}
public Object myarround(ProceedingJoinPoint pjo) throws Throwable{
System.out.println("。。。执行环绕。。。");
System.out.println("......环绕前置");
Object obj=pjo.proceed();
System.out.println("环绕后置........");
return obj;
}
}
3 Spring配置文件
<?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"
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">
<bean id="myadvice" class="com.zxf.advice.MyAdvice"/>
<aop:config>
<aop:aspect ref="myadvice">
<aop:pointcut id="mypoint" expression="execution(* com.zxf.demo.Demo1.d1(..))"/>
<aop:before method="mybeofre" pointcut-ref="mypoint"/>
<aop:after method="myafter" pointcut-ref="mypoint"/>
<aop:after-throwing method="mythrow" pointcut-ref="mypoint"/>
<aop:around method="myarround" pointcut-ref="mypoint"/>
</aop:aspect>
</aop:config>
<bean id="domo1" class="com.zxf.demo.Demo1"/>
</beans>
4 编写测试类
package com.zxf.test;
import com.zxf.demo.Demo1;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test1 {
@Test
public void test1(){
ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
Demo1 domo1 = ac.getBean("domo1", Demo1.class);
domo1.d1();
}
}
5 运行结果