在代码的开发中,我们经常会使用try…catch,几乎每一个方法都需要写,这样的代码非业务逻辑和业务逻辑耦合在一起,导致代码的难以维护。所以决定封装一个异常通知类,来统一拦截controller的异常
配置文件
<!--包扫描-->
<context:component-scan base-package="com.tfjy"/>
<!--配置aspect自动代理-->
<aop:aspectj-autoproxy/>
统一异常拦截
package com.tfjy.itoo.tool.aspect;
/**
* 统一处理controller的异常
*
* @author lina
* @version 1.0.0
* @since 1.0.0 2018-10-22 09:05:55
*/
@Aspect
public class ExceptionIntercept {
private static final Logger logger = LoggerFactory.getLogger(AfterReturningAspect.class);
private final Map<String, String> clazzMap = new HashMap<>();
private boolean flag = true;
// 定义切点
@Pointcut("execution(* *..UserController.addUser())")
public void declareJoinPointExpression() {
}
/**
* 拦截controller异常,环绕通知
*
* @param pjp 被拦截的方法
* @return 正常:返回原有信息
* @author lina
* @since 1.0.0 2018-11-6 19:07:29
*/
@Around(value = "declareJoinPointExpression()")
public Object handleControllerMethod(ProceedingJoinPoint pjp) {
try {
System.out.println("========环绕前======");
// 执行方法
return pjp.proceed(pjp.getArgs());
System.out.println("=========环绕后===========");
} catch (Throwable throwable) {
logger.error(String.valueOf(pjp.getSignature()), throwable);
throw new RuntimeException(throwable);
}
}
}
controller类
@Controller("userController")
public class UserController {
@Resource
private UserService userService;
@Test
public void addUser(){
// 读取配置文件加载bean
ApplicationContext context=new ClassPathXmlApplicationContext("spring-aop.xml");
UserService userService=(UserService) context.getBean("userService");
userService.addUser();
}
}
测试类
@Test
public void test(){
ApplicationContext context=new ClassPathXmlApplicationContext("spring-aop.xml");
UserController userController=(UserController) context.getBean("userController");
userController.addUser();
}
运行结果

本文介绍了如何在Spring框架中使用AOP进行统一的异常拦截处理,包括配置文件的设置,异常拦截的实现,Controller类的异常处理逻辑,以及测试类的验证和最终的运行结果展示。

3519

被折叠的 条评论
为什么被折叠?



