文档章节

java Spring AOP 之 AspectJ

y
 yan5845hao
发布于 2017/05/12 15:47
字数 604
阅读 15
收藏 0
  • 使用MVN包配置
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>3.2.16.RELEASE</version>
        </dependency>
       <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjrt</artifactId>
            <version>1.8.9</version>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.7.2</version>
        </dependency>
        <dependency>
            <groupId>cglib</groupId>
            <artifactId>cglib</artifactId>
            <version>2.2</version>
        </dependency>
  • advice类编写 (在开发advice类的时候一定要加上@Component不然无法实例化到spring容器中)
package com.uwo.resources.ui.aspectj;
import org.apache.log4j.Logger;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;
import java.util.Arrays;
/** * Created by yanhao on 2017/5/12. */
@Component
@Aspect
public class OAuthAdvice {
   private final Logger log = Logger.getLogger(OAuthAdvice.class);
   @Pointcut("execution(* com.uwo.resources.ui.service.*.*(..))")
   public void oauthMethod(){
   }
   @Around(value = "oauthMethod()")
   public Object around(ProceedingJoinPoint point) throws Throwable{
       log.warn("[Around] 参数为:" + Arrays.toString(point.getArgs()));
       Object returnValue = point.proceed(point.getArgs());
       log.warn("[Around] 返回值:" + returnValue);
       return returnValue;
   }
   @Before(value = "oauthMethod()")
   public void before(JoinPoint point){
       log.warn("[Before]:方法为:" + point.getSignature().getDeclaringTypeName() + "." + point.getSignature().getName());
       log.warn("[Before]:参数为:" + Arrays.toString(point.getArgs()));
       log.warn("[Before]:目标对象:" + point.getTarget());
   }
   @AfterReturning(value = "oauthMethod()", returning="returnValue")
   public void afterReturning(JoinPoint point, Object returnValue) {
       log.warn("[AfterReturning]:方法为:" + point.getSignature().getDeclaringTypeName() + "." + point.getSignature().getName());
       log.warn("[AfterReturning]:参数为:" + Arrays.toString(point.getArgs()));
       log.warn("[AfterReturning]:返回值:" + returnValue);
       log.warn("[AfterReturning]:目标对象:" + point.getTarget());
   }
   @After(value = "oauthMethod()")
   public void after(JoinPoint point) {
       log.warn("[After]:方法为:" + point.getSignature().getDeclaringTypeName() + "." + point.getSignature().getName());
       log.warn("[After]:参数为:" + Arrays.toString(point.getArgs()));
       log.warn("[After]:目标对象:" + point.getTarget());
   }
}
  • spring配置文件配置
<?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-3.2.xsd
		http://www.springframework.org/schema/aop
		http://www.springframework.org/schema/aop/spring-aop-3.2.xsd"
       default-autowire="byName" default-lazy-init="false">

    <!-- 采用注释的方式配置bean -->
    <context:annotation-config />

    <!-- 配置要扫描的包 -->
    <context:component-scan base-package="com.uwo.resources.ui.controller" />
    <context:component-scan base-package="com.uwo.resources.ui.service" />
    <context:component-scan base-package="com.uwo.resources.ui.aspectj"/>
    <!-- proxy-target-class默认"false",更改为"true"使用CGLib动态代理 -->
    <aop:aspectj-autoproxy proxy-target-class="true" />
    <!--<bean id="oAuthAdvice" class="com.uwo.resources.ui.aspectj.OAuthAspect"></bean>-->
    <!--<aop:config>-->
        <!--<aop:pointcut expression="execution(public * com.uwo.resources.ui.service.*.*(..))"-->
                      <!--id="servicePointcut"/>-->
        <!--<aop:aspect id="oAuthAdvice" ref="oAuthAdvice">-->
            <!--<aop:around method="around" pointcut-ref="servicePointcut"/>-->
            <!--<aop:before method="before"  pointcut-ref="servicePointcut"/>-->
            <!--<aop:after method="after" pointcut-ref="servicePointcut"/>-->
            <!--<aop:after-returning method="afterReturning" pointcut-ref="servicePointcut" returning="returnValue"/>-->
        <!--</aop:aspect>-->
    <!--</aop:config>-->
</beans>
  • 执行结果
[UWO-API WARN 2017-05-12 15:43:48] [Around] 参数为:[oauth2]
[UWO-API WARN 2017-05-12 15:43:48] [Before]:方法为:com.uwo.resources.ui.service.OAuthService.init
[UWO-API WARN 2017-05-12 15:43:48] [Before]:参数为:[oauth2]
[UWO-API WARN 2017-05-12 15:43:48] [Before]:目标对象:com.uwo.resources.ui.service.OAuthService@2a19b056
OAuth service oauth2 init!!
[UWO-API WARN 2017-05-12 15:43:48] [Around] 返回值:GO
[UWO-API WARN 2017-05-12 15:43:48] [After]:方法为:com.uwo.resources.ui.service.OAuthService.init
[UWO-API WARN 2017-05-12 15:43:48] [After]:参数为:[oauth2]
[UWO-API WARN 2017-05-12 15:43:48] [After]:目标对象:com.uwo.resources.ui.service.OAuthService@2a19b056
[UWO-API WARN 2017-05-12 15:43:48] [AfterReturning]:方法为:com.uwo.resources.ui.service.OAuthService.init
[UWO-API WARN 2017-05-12 15:43:48] [AfterReturning]:参数为:[oauth2]
[UWO-API WARN 2017-05-12 15:43:48] [AfterReturning]:返回值:GO
[UWO-API WARN 2017-05-12 15:43:48] [AfterReturning]:目标对象:com.uwo.resources.ui.service.OAuthService@2a19b056

© 著作权归作者所有

共有 人打赏支持
上一篇: Java 动态代理
下一篇: java AOP 之 AspectJ
y
粉丝 7
博文 124
码字总数 22079
作品 0
扬州
程序员
私信 提问
2014-03-11 Spring的学习(3)------面向切面编程(AOP)

AOP概念 首先让我们从一些重要的AOP概念和术语开始。这些术语不是Spring特有的。不过AOP术语并不是特别的直观,如果Spring使用自己的术语,将会变得更加令人困惑。 切面(Aspect):一个关注...

查封炉台
2014/03/11
0
0
Spring AOP 实现原理与 CGLIB 应用

AOP(Aspect Orient Programming),也就是面向方面编程,作为面向对象编程的一种补充,专门用于处理系统中分布于各个模块(不同方法)中的交叉关注点的问题,在 Java EE 应用中,常常通过 ...

IBMdW
2012/09/26
1K
2
Spring中的AOP(一)——AspectJ的基本使用

AOP(Aspect Orient Programming),也就是面向切面编程,作为面向对象编程的一种补充,当前已经成为一种比较成熟的编程思想,其实AOP问世的时间并不长,甚至在国内的翻译还不太统一(另有人...

摆渡者
2014/03/13
0
1
Spring AOP 实现原理与 CGLIB 应用

AOP(Aspect Orient Programming),作为面向对象编程的一种补充,广泛应用于处理一些具有横切性质的系统级服务,如事务管理、安全检查、缓存、对象池管理等。AOP 实现的关键就在于 AOP 框架...

ihaolin
2014/03/31
0
0
Spring AOP 实现原理与 CGLIB 应用

AOP(Aspect Orient Programming),作为面向对象编程的一种补充,广泛应用于处理一些具有横切性质的系统级服务,如事务管理、安全检查、缓存、对象池管理等。AOP 实现的关键就在于 AOP 框架...

只想一个人静一静
2014/02/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

微服务分布式事务实现

https://www.processon.com/view/link/5b2144d7e4b001a14d3d2d30

WALK_MAN
今天
2
0
《大漠烟尘》读书笔记及读后感文章3700字

《大漠烟尘》读书笔记及读后感文章3700字: 在这个浮躁的社会里,你有多久没有好好读完一本书了? 我们总觉得自己和别人不一样,所以当看到别人身上的问题时,很少有“反求诸己”,反思自己。...

原创小博客
今天
3
0
大数据教程(9.5)用MR实现sql中的jion逻辑

上一篇博客讲解了使用jar -jar的方式来运行提交MR程序,以及通过修改YarnRunner的源码来实现MR的windows开发环境提交到集群的方式。本篇博主将分享sql中常见的join操作。 一、需求 订单数据表...

em_aaron
今天
3
0
十万个为什么之什么是resultful规范

起源 越来越多的人开始意识到,网站即软件,而且是一种新型的软件。这种"互联网软件"采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,具有高延时(high latency)、高并发等特点...

尾生
今天
3
0
Terraform配置文件(Terraform configuration)

Terraform配置文件 翻译自Terraform Configuration Terraform用文本文件来描述设备、设置变量。这些文件被称为Terraform配置文件,以.tf结尾。这一部分将讲述Terraform配置文件的加载与格式。...

buddie
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部