文档章节

java Spring AOP 之 AspectJ

y
 yan5845hao
发布于 2017/05/12 15:47
字数 604
阅读 14
收藏 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

© 著作权归作者所有

共有 人打赏支持
y
粉丝 7
博文 120
码字总数 21437
作品 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),作为面向对象编程的一种补充,广泛应用于处理一些具有横切性质的系统级服务,如事务管理、安全检查、缓存、对象池管理等。AOP 实现的关键就在于 AOP 框架...

只想一个人静一静
2014/02/27
0
0
Spring AOP 实现原理与 CGLIB 应用

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

ihaolin
2014/03/31
0
0
Spring中的AOP(一)——AspectJ的基本使用

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

摆渡者
2014/03/13
0
1
Aspectj与Spring AOP比较

1、简介 今天有多个可用的 AOP 库, 它们需要能够回答许多问题: 是否与用户现有的或新的应用程序兼容? 在哪里可以实现 AOP? 与自己的应用程序集成多快? 性能开销是多少? 在本文中, 我们将...

沈渊
04/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

打开eclipse出现an error has occurred see the log file

解决方法: 1,打开eclipse安装目录下的eclipse.ini文件; 2,打开的文本文件最后添加一行 --add-modules=ALL-SYSTEM 3,保存重新打开Eclipse。...

任梁荣
昨天
4
0
搞定Northwind示例数据库,无论哪个版本的SQLServer都受用

Northwind数据库 从这里可以找到突破口: http://social.msdn.microsoft.com/Forums/zh-CN/Vsexpressvb/thread/8490a1c6-9018-40c9-aafb-df9f79d29cde 下面是MSDN: http://msdn2.microsoft......

QQZZFT
昨天
1
0
mysql主从同步,安装配置操作

准备 两台mysql服务,我这里准备了如下: 主库:192.168.176.128 从库:192.168.176.131 如何在Linux上安装mysql服务,请看https://blog.csdn.net/qq_18860653/article/details/80250499 操作...

小致dad
昨天
4
0
一个手机装天下,走遍中国都不怕!

导读 “1200元(人民币,下同),微信支付,可以,你扫我。”来自西非马里共和国的展商Albert拿着手机,和一位买走他手鼓的中国游客用简单的汉语交流着。 近日,“第十四届中俄蒙经贸洽谈暨商品...

问题终结者
昨天
3
0
Redis的“死键”问题

大规模的数据库存储系统中,数据的生命周期管理是很有必要的;从业务角度发现过期数据,数据归档和数据碎片整理等。以MySQL为例,1个运行很久的TB级MySQL实例中,极有可能数百GB的数据,对业...

IT--小哥
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部