文档章节

java Spring AOP 之 AspectJ

y
 yan5845hao
发布于 2017/05/12 15:47
字数 604
阅读 13
收藏 0
点赞 0
评论 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
粉丝 6
博文 103
码字总数 20787
作品 0
扬州
程序员
Aspectj与Spring AOP比较

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

沈渊 ⋅ 04/18 ⋅ 0

Spring之使用注解配置Spring AOP

Spring框架通过注解配置AOP是基于AspectJ实现的。 Spring框架只是直接使用了AspectJ的注解,但并没有使用AspectJ的编译器或织入器,仍然是在运行时动态生成AOP代理。 aspectj使用的是静态代理...

Java攻城玩家 ⋅ 05/31 ⋅ 0

Spring编程式和声明式事务实例讲解

Java面试通关手册(Java学习指南):https://github.com/Snailclimb/JavaGuide 历史回顾: 可能是最漂亮的Spring事务管理详解 Spring事务管理 Spring支持两种方式的事务管理: 编程式事务管理...

snailclimb ⋅ 05/23 ⋅ 0

Spring中基于AOP的XML架构

以下内容引用自http://wiki.jikexueyuan.com/project/spring/aop-with-spring-framenwork/xml-schema-based-aop-with-spring.html: 为了使用aop命名空间标签,需要导入spring-aop架构,如下......

easonjim ⋅ 2017/05/25 ⋅ 0

Spring AOP就是这么简单啦

前言 只有光头才能变强 上一篇已经讲解了Spring IOC知识点一网打尽!,这篇主要是讲解Spring的AOP模块~ 之前我已经写过一篇关于AOP的文章了,那篇把比较重要的知识点都讲解过了一篇啦:Sprin...

Java3y ⋅ 05/24 ⋅ 0

IOC/AOP工具 - jBeanBox

jBeanBox是一个微形但功能较齐全的IOC/AOP工具适用于JAVA7+,利用了Java的初始化块实现的Java配置代替XML。jBeanBox采用Apache License 2.0开源协议。 其他一些IOC/AOP框架的问题: 1)Sprin...

yong9981 ⋅ 2016/07/25 ⋅ 14

SSM整合,个人总结和step

我最近才整合完SSM。 前段时间,分开学习了这三个框架,都是看某黄埔军校的视频,整合的部分没看视频,想自己做。 但是有一些部分自己没有能完成,主要是如何从spring容器里取出Application...

wzlhlhhh ⋅ 05/11 ⋅ 0

Spring AOP 源码分析 - 筛选合适的通知器

1.简介 从本篇文章开始,我将会对 Spring AOP 部分的源码进行分析。本文是 Spring AOP 源码分析系列文章的第二篇,本文主要分析 Spring AOP 是如何为目标 bean 筛选出合适的通知器(Advisor...

java高级架构牛人 ⋅ 06/21 ⋅ 0

基于@AspectJ和Schema的AOP

1.Spring对AOP的支持 新增了基于Schema的配置支持,为AOP专门提供了aop命名空间 新增了对AspectJ切点表达式语言的支持, 可以无缝地集成AspectJ 2.Java5.0注解知识快速进阶 注解是代码的附属...

小螺钉12138 ⋅ 05/13 ⋅ 0

Spring AOP中自我调用的问题

前几天在做项目的时候同事说,在使用AOP进行拦截的时候发现有些方法有时候能输出拦截的日志有时候不输出拦截的日志。发现在单独调用这些方法的时候是有日志输出,在被同一个类中的方法调用的...

木叶之荣 ⋅ 2017/05/21 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Kubeflow实战系列:利用TFJob导出分布式TensorFlow模型

介绍 本系列将介绍如何在阿里云容器服务上运行Kubeflow, 本文介绍如何使用TfJob导出分布式模型训练模型。 第一篇:阿里云上使用JupyterHub 第二篇:阿里云上小试TFJob 第三篇:利用TFJob运行...

全部原谅 ⋅ 19分钟前 ⋅ 0

007. 深入JVM学习—老年代

老年代空间的主要目的是用于存储由Eden发送来的对象,一般在经历好几次“Minor GC”还会保存下来的对象,才会被复制到老年代,这样就可以存放更多的对象,同时在老年代中执行GC的次数也相对较...

影狼 ⋅ 20分钟前 ⋅ 0

常见的一些C#开源框架或者开源项目

原:https://blog.csdn.net/qq_27825451/article/details/70666044 Json.NET http://json.codeplex.com/ Json.Net 是一个读写Json效率比较高的.Net框架.Json.Net 使得在.Net环境下使用Json更......

whoisliang ⋅ 21分钟前 ⋅ 0

设计模式基本原理

刚开始接触编程这行的时候看过设计模式,当时感觉学这些模式没有太大的用处,当时也看不太懂。但是随着慢慢接触这一行,经过一段时间的编程以后,再回过头来看设计模式,发现设计模式的确是太...

王子城 ⋅ 24分钟前 ⋅ 0

阿里云全面支持IPv6!一文揽尽4位大咖精彩演讲

摘要: 自从去年11月以来,阿里巴巴高度重视数据中心的网络改造、云产品改造、应用及网络改造等多个维度,经过半年以来的建设,阿里云已经完成了域名解析等关键产品的分析,现在阿里云已经完...

传授知识的天使 ⋅ 35分钟前 ⋅ 0

windows Android sdk 配置

1、下载Android SDK,点击安装,直接默认路径即可! 下载地址:http://developer.android.com/sdk/index.html 2、默认路径安装后,安装完成,开始配置环境变量。 3、打开计算机属性——高级系...

阿豪boy ⋅ 38分钟前 ⋅ 0

bash shell script 简明教程

User <--> bash <--> kernel shell is not kernel or part of kernel various shells: tcsh, csh, bash, ksh find the using shell: echo $SHELL find all the shells: cat /etc/shells what......

mskk ⋅ 40分钟前 ⋅ 0

Service Mesh简史

William Morgan Service Mesh是一个相当新的概念,讲它的“历史”似乎有些勉强。就目前而言,Service Mesh已经在部分企业生产环境中运行了超过18个月,它的源头可以追溯到2010年前后互联网公...

好雨云帮 ⋅ 40分钟前 ⋅ 0

10个免费的服务器监控工具

监控你的WEB服务器或者WEB主机运行是否正常与健康是非常重要的。你要确保用户始终可以打开你的网站并且网速不慢。服务器监控工具允许你收集和分析有关你的Web服务器的数据。 有许多非常好的服...

李朝强 ⋅ 53分钟前 ⋅ 0

压缩工具之zip-tar

zip 支持目录压缩。使用yum安装zip包,使用yum安装unzip包 zip 1.txt.zip 1.txt #将1.txt文件压缩,新生成的压缩文件为1.txt.zip,原文件保留 zip -r 123.zip 123/ #-r对目录操作。将123/目录...

ZHENG-JY ⋅ 53分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部