12、基于XML方式的AOP

前端之家收集整理的这篇文章主要介绍了12、基于XML方式的AOP前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

创建Bean

@H_502_3@//首先创建业务接口 package com.codestd.springstudy.aop.xml.service; public interface UserService { public void login(); public void logout() throws Exception; } //创建实现类 package com.codestd.springstudy.aop.xml.service; public class UserServiceImpl implements UserService { @Override public void login() { System.out.println("User login"); } @Override public void logout() throws Exception { System.out.println("User logout"); throw new Exception("Exception test"); } } //创建切面类 package com.codestd.springstudy.aop.xml; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; public class AspectBean { public void doAfter(JoinPoint jp){ System.out.println("do after"); } public void doBefore(JoinPoint jp){ System.out.println("do after"); } public Object doAround(ProceedingJoinPoint jp) throws Throwable{ System.out.println("do Around"); Object obj = jp.proceed(); return obj; } public void doThrowing(JoinPoint jp,Exception e){ System.out.println(e.getClass().getName()+"|->|"+e.getMessage()); } }

配置AOP

下面使用XML配置AOP

@H_502_3@<bean id="userService" class="com.codestd.springstudy.aop.xml.service.UserServiceImpl" /> <bean id="aspectBean" class="com.codestd.springstudy.aop.xml.AspectBean" /> <aop:config> <aop:aspect id="aspect" ref="aspectBean"> <aop:pointcut expression="execution(* com.codestd.springstudy.aop.xml.service.*.*(..))" id="servicePointcut"/> <aop:after method="doAfter" pointcut-ref="servicePointcut" /> <aop:before method="doBefore" pointcut-ref="servicePointcut"/> <aop:around method="doAround" pointcut-ref="servicePointcut"/> <aop:after-throwing method="doThrowing" pointcut-ref="servicePointcut" throwing="e"/> </aop:aspect> </aop:config>

doAround方法要有返回值,并且类型是Object,接收的参数类型为ProceedingJoinPoint
aop:after-throwing中需要使用throwing指定异常的参数名,doThrowing(JoinPoint jp,Exception e)中的e

测试

测试方法如下

@H_502_3@package com.codestd.springstudy.aop.xml.service; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations={"classpath:aop/applicationContext.xml"}) public class UserServiceImplTest { @Autowired private UserService userService; @Test public void test() throws Exception { this.userService.login(); this.userService.logout(); } }

测试结果如下

@H_502_3@do after do Around User login do after do after do Around User logout do after java.lang.Exception|->|Exception test

使用XML方式配置引入

@H_502_3@<aop:config> <aop:aspect> <aop:declare-parents types-matching="com.codestd.springstudy.aop.xml.service.UserService+" implement-interface="com.codestd.springstudy.aop.introductions.Flyable" default-impl="com.codestd.springstudy.aop.introductions.DefaultFlyable"/> </aop:aspect> </aop:config>

测试类如下

@H_502_3@@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations={"classpath:aop/applicationContext.xml"}) public class UserServiceImplTest { @Autowired private Flyable flyable; @Test public void test() throws Exception { this.flyable.fly(); } }

猜你在找的XML相关文章