SpringMVC+Spring项目使用AOP处理异常失效的问题

作者: admin 分类: 异常处理 发布时间: 2018-07-09 22:47  阅读: 305 views

最近在做新的网关项目,一些都是从零开始,好久没有这样写过代码的自然碰到了很多问题

其中一个就是在使用spring AOP功能的时候切面失效,一直进不去 ):

 

是一个MAVEN项目web工程,引用了SringMVC 和 Spring的一些模块。只做web页面和controller层,其他的业务逻辑通过

调用dubbo服务来实现。由于可能会出现各种异常,所以想到在controller层做一个切面,所有异常抛到这一层做统一处理,并

返回给前端。

切面类定义如下。

package com.xxx.aop;

import com.xxx.gateway.exception.GatewayMgrException;
import com.xxx.service.support.exceptions.DaoException;
import com.xxx.service.support.json.JsonResp;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;


@Aspect
@Component
@Order(1)
public class AspectAdvice {
    @Around(value = "execution(* com.xxx.gateway.controller..*.*(..) )")
    public Object doAround(ProceedingJoinPoint pjp) throws Throwable {
        JsonResp result = new JsonResp();

        try {
            Object ret = pjp.proceed();

            return ret;
        } catch (GatewayMgrException ex) {
            result.setStatus("error");
            result.setData(ex.getMessage());
        } catch (DaoException ex) {
            result.setStatus("error");
            result.setData(ex.getMessage());
        } catch (Throwable e) {
            result.setStatus("error");
            result.setData("系统异常");
        }

        return result;
    }
}

 

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>4.3.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.6.10</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.8.8</version>
</dependency>

 

配置文件

最开始是写在左侧spring的配置文件中

怎么运行都不成功,尝试了很多方法

后来找资料才找到原来是

“spring与springmvc加载配置文件是不同步的,springmvc加载文件对注解进行扫描后,所有的注解都被扫到容器里面,当spring同样加载配置文件扫描注解时,因为容器中已经

存在Service类,那么CGLib代理或jdk动态代理就不对它进行代理了,直接导致了applicationContext.xml中的事务不起作用,出现异常,事务不回滚。”

 

后来把配置移到右边的springMVC文件中就可以用了

感谢 http://www.cnblogs.com/wcyBlog/p/4342077.html 这篇文章解释的感觉最有领悟


   原创文章,转载请标明本文链接: SpringMVC+Spring项目使用AOP处理异常失效的问题

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。 必填项已用*标注

更多阅读