未分类
2020-12-06 10:23:44
1822677238@qq.com
手机扫码查看
2020java框架教程:spring的aop编程
1.创建web项目
2.引入jar包:
aopalliance.jar、aspectjweaver.jar
3.日志
log4j.properties
4.准备目标对象
先创建类的接口,然后创建类的实现类
5.编写通知
前置通知:在目标方法之前调用
后置通知(如果出现异常就不调用):在目标方法之后调用
后置通知:(无论是否出现异常都会调用):在目标方法之后调用
环绕通知:在目标方法之前、后调用
异常通知:出现异常则调用
public class TransactionAdvice {
/*
前置通知:在目标方法之前调用
后置通知(如果出现异常就不调用):在目标方法之后调用
后置通知:(无论是否出现异常都会调用):在目标方法之后调用
环绕通知:在目标方法之前、后调用
异常通知:出现异常则调用
*/
public void before(){
System.out.println("前置通知被执行");
}
public void afterReturning(){
System.out.println("后置通知被执行(出现异常不调用)");
}
public void after(){
System.out.println("后置通知被执行(无论是否出现异常都会调用)");
}
public void afterException(){
System.out.println("异常通知被执行");
}
public Object around(ProceedingJoinPoint point) throws Throwable{
System.out.println("环绕通知前");
Object proceed = point.proceed();
System.out.println("环绕通知后");
return proceed;
}
}

6.配置织入,将通知织入到目标对象
<?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:context="http://www.springframework.org/schema/context"
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/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<!-- 目标对象 -->
<bean name="usersService" class="service.impl.UsersServiceImpl"/>
<!-- 通知对象 -->
<bean name="transactionAdvice" class="advice.TransactionAdvice"/>
<!-- 将通知对象织入目标对象 -->
<aop:config>
<!-- 选择切入点 -->
<!-- 匹配任意返回值类型以及service包下所有的类和任意参数 -->
<!-- 表达式:execution(* service..*ServiceImpl.*(..)) -->
<!-- 匹配update无参的且无返回值的方法 -->
<!-- 表达式:execution(public void service.impl.UsersServiceImpl.update()) -->
<aop:pointcut id="pointcut" expression="execution(* service..*ServiceImpl.*(..))"/>
<!-- 通知对象 -->
<aop:aspect ref="transactionAdvice">
<aop:before method="before" pointcut-ref="pointcut"/>
<aop:after-returning method="afterReturning" pointcut-ref="pointcut"/>
<aop:after method="after" pointcut-ref="pointcut"/>
<aop:around method="around" pointcut-ref="pointcut"/>
<aop:after-throwing method="afterException" pointcut-ref="pointcut"/>
</aop:aspect>
</aop:config>
</beans>
7.测试
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class AopTest {
@Resource(name = "usersService")
private UsersService usersService;
@Test
public void insert(){
usersService.insert();
}
@Test
public void testUpdate(){
usersService.update();
}
}




发表回复