码迷,mamicode.com
首页 > 编程语言 > 详细

spring AspectJ AOP

时间:2015-03-20 23:42:44      阅读:243      评论:0      收藏:0      [点我收藏+]

标签:

1、开启对spring AspectJ风格切面的支持

2、扫描注解的bean

3、声明切面@Aspect

4、声明切入点@Pointcut(value="",argNames="")

5、声明通知@Before @After @AfterReturning @AfterThrowing @Around

@Before 前置通知 目标方法运行前织入

@After 后置通知 目标方法后织入

@AfterReturning 后置返回通知 目标方法返回后织入

@AfterThrowing 后置异常通知 目标方法抛出异常后织入 

@Around 环绕通知 目标方法运行前后及异常抛出后织入

 

    <!-- 开启Spring对标注了@Aspect注解bean的支持 默认是不支持@AspectJ风格的切面
     统一使用CGLIB代理(spring默认是JDK的动态代理,若没有实现接口则会开启CGLIB)
     使用CGLIB,它有一个使用限制,即无法在使用final修饰的bean上应用横切关注点
     因为代理需要对Java类进行继承,一旦使用了关键字final,这将是无法做到的-->
    <aop:aspectj-autoproxy proxy-target-class="true" />

 

    <!-- 自动扫描注解的bean-->
    <context:component-scan base-package="com.xxx.xxx">
        <context:include-filter type="annotation" expression="com.alibaba.dubbo.config.annotation.Service" />
        <context:include-filter type="annotation" expression="org.aspectj.lang.annotation.Aspect" />
    </context:component-scan>

 

@Aspect
@Slf4j
public class Aspect {
    /**
     * 声明切入点,此方法无内容,返回类型必须是void
     */
    @Pointcut("execution(* com.xxx.xxx.*.service..*.*(..))")
    public void pointCut() {
}
/** * 声明环绕通知 * @param pjp 连接点 通过连接点实例来获得方法执行的上下文信息 * @return * @throws Throwable */ @Around(value = "pointCut()") public Object transferException(ProceedingJoinPoint pjp) throws Throwable { // 方法返回值 Class<?> methodReturnType = ((MethodSignature) pjp.getSignature()).getMethod().getReturnType(); Object result = null; try { result = pjp.proceed();//Proceed with the next advice or target method invocation } catch (Exception e) { log.error("exception occurred.............."); if (methodReturnType.isAssignableFrom(Response.class)) { String errorCode = null; String errorMsg = null; if (e instanceof ApplicationException) { errorCode = ((ApplicationException) e).getCode(); errorMsg = ((ApplicationException) e).getErrorMessage(); } else { errorCode = BussErrorCode.ERROR_CODE_999999.getErrorcode(); errorCode = BussErrorCode.ERROR_CODE_999999.getErrordesc(); } result = new Response<Object>(errorCode, errorMsg); } } return result; } }

 

技术分享

 

spring AspectJ AOP

标签:

原文地址:http://www.cnblogs.com/Aurelius/p/4354818.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!