第一步:目标类
//dao package it.heima.aspectj; public class AccoutDao { public void out(String name,Double monney){ System.out.println(name+"成功转出"+monney); } public void in (String name,Double monney){ System.out.println(name+"成功转入"+monney); } }
//service
package it.heima.aspectj; public class AccountService { private AccoutDao accoutDao; public void setAccoutDao(AccoutDao accoutDao){ this.accoutDao=accoutDao; } public void transfer(String name1,String name2,Double monney){ accoutDao.out(name1,monney); int num=1/0; accoutDao.in(name2,monney); } }
第二步:增强类
package it.heima.aspectj;
import org.aspectj.lang.JoinPoint;
public class MyAspect02 {
//前置通知
public void before(JoinPoint joinPoint){
System.out.println("前置通知");
}
//后置通知
public void afterReturning(JoinPoint joinPoint,Object Result){
System.out.println("后置通知");
}
//异常通知
public void afterThrowning(JoinPoint joinPoint,Exception ex){
System.out.println("异常通知,回滚,异常原因:"+ex);
}
//最后通知
public void after(JoinPoint joinPoint){
System.out.println("释放资源");
}
}
第三步:applicationContext.xml配置
<!--配置Dao层--> <bean id="accoutDao" class="it.heima.aspectj.AccoutDao"></bean> <!--配置service层--> <bean id="accountService" class="it.heima.aspectj.AccountService"> <property name="accoutDao" ref="accoutDao"/> </bean>
<!--配置增强类(单独)--> <bean id="myAspect02" class="it.heima.aspectj.MyAspect02"></bean>
<!--让增强类和普通类产生关系--> <aop:config proxy-target-class="false"> <aop:pointcut id="mypointcut" expression="bean(*Service)"/>
<aop:aspect ref="myAspect02"> <aop:before method="before" pointcut-ref="mypointcut"/> <aop:after-returning method="afterReturning" pointcut-ref="mypointcut" returning="Result"/> <aop:after-throwing method="afterThrowning" pointcut-ref="mypointcut" throwing="ex"/> <aop:after method="after" pointcut-ref="mypointcut"/> </aop:aspect> </aop:config> </beans>
第四步:测试
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = "classpath:applicationContext.xml") public class AccountServiceTest { @Value("#{accountService}") private AccountService accountService; @Test public void test(){ accountService.transfer("aaa","bbb",100.0); } }