`
liaofeng_xiao
  • 浏览: 126148 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Spring AOP(3):Spring Advice

阅读更多
首先接上一篇文章,我们来看看JDK动态代理和Cglib实现的代理有哪些不经如人意的地方:
  • 对目标类中的所有业务方法都添加了横切逻辑代码,但是现实中我们只需要inhance特定的方法【这点其实可以通过在intercept方法或invoke方法中对目标类进行判断而达到只对特定类的特定方法进行代码织入】
  • 都用硬编码的方式指定了横切逻辑的植入位置,例子中都是在方法调用前后植入织入目标代码,但现实中我们可能需要在抛出异常时织入目标代码,或者只在方法前面织入。这种需求的多样性就要求织入点应该是可以灵活选择或者灵活配置的
  • 为不同的目标类创建代理对象时需要编写不同的创建过程代码,无法做到通用
  • Cglib和JDK动态代理各有优缺点,最好能够把两者统一起来实现AOP


下面来看看Spring Advice的5个类型:
  • ThrowsAdvice:在目标类的方法抛出异常后进行逻辑代码的织入
  • BeforeAdvice:前置Advice,但是Spring只支持方法级别的前置Advice,所以提供了子接口MethodBeforeAdvice,用于在目标方法执行前织入逻辑代码
  • MethodInterceptor:在方法执行前后织入目标代码,注意区别cglib的MethodInterceptor和aop alliance的MethodInterceptor。
  • AfterReturningAdvice:后置Advice,在方法返回后进行目标代码的织入
  • IntroductionInterceptor:相对于前面四个这个比较特殊,它可以在目标类中增加一些属性和方法,而不像前面四种那样在围绕方法织入目标代码。

     总结起来就这5中Advice就是:一男一女,一前(MethodBeforeAdvice)一后(AfterReturningAdvice),前前后后(MethodInterceptor),碰到了第三者(IntroductionInterceptor),抛出异常的爱(ThrowsAdvice)……
     在使用代理的过程中,我们都需要通过ProxyFactory获得目标对象的代理对象。先来看看ProxyFactory的构造方法:
ProxyFactory()
          Create a new ProxyFactory.
ProxyFactory(Class[] proxyInterfaces)
          Create a new ProxyFactory.
ProxyFactory(Class proxyInterface, Interceptor interceptor)
          Create a new ProxyFactory for the given interface and interceptor.
ProxyFactory(Class proxyInterface, TargetSource targetSource)
          Create a ProxyFactory for the specified TargetSource, making the proxy implement the specified interface.
ProxyFactory(Object target)
          Create a new ProxyFactory.

     从这些构造函数的参数类型中,有没有猜出什么端倪?先看Class[] proxyInterfaces,它指定代理对象的接口,也就是说该ProxyFactory可以获得这些接口实现类的代理对象,参数是接口数组,任何类只要实现了这些接口中的一个就可以通过该ProxyFactory获得该实现类的代理对象【一定要与JDK动态代理中的接口联系起来理解】。当然,仅指定了代理的接口是不够的,还需要制定Advice,Interceptor指定拦截器。Object target指定需要代理的目标对象。建议大家看看ProxyFactory的父接口AdvisedSupport接口,该接口提供了对Advice、Advisor和Interfaces的操作,也是我们编程中所直接使用得到的。
     有点事,先下线,有空接着复习,否则害怕刚看了一遍又忘得差不多了。说实在话自己都不确定这些文章对阅读者有没有哪怕一点帮助,如果有我相信也是对于随意的复习和回忆有点作用,对于新学者,建议不要看类似的文章了。写博客权当自己复习的一种方法吧,阿门!
分享到:
评论

相关推荐

    Spring AOP 16道面试题及答案.docx

    描述一下Spring AOP?...Spring中有哪些不同的通知类型(advice types)? Spring AOP 代理是什么? 引介(Introduction)是什么? 连接点(Joint Point)和切入点(Point Cut)是什么? 织入(Weaving)是什么?

    Spring实现AOP的多种方式 切点函数

    里面包括4个例子:(1)Spring实现AOP方式之一:基于XML配置的Spring AOP (2)Spring实现AOP方式之二:使用注解配置 Spring AOP (3)Spring AOP : AspectJ Pointcut 切点 (4)Spring AOP : Advice 声明 (通知注解)

    SpringAOP:Spring AOP示例

    SpringAOP Spring AOP(面向方面​​的编程)用于模块化“横截面”服务。 用一种简单的方式,我们可以说它是一个旨在拦截某些进程的组件,例如,在执行某个方法时,Spring AOP可以审核该执行方法,并在该方法执行...

    Spring AOP简单demo

    Spring AOP简单demo 入门级的 advice

    Spring AOP源码深度解析:掌握Java高级编程核心技术

    Spring AOP是基于代理模式实现的,主要包括动态代理、通知(Advice)、切点(Pointcut)、切面(Aspect)和连接点(Join point)。动态代理是实现AOP的基础,它通过JDK动态代理或CGLIB代理生成被代理对象的子类。...

    Spring  AOP实现方法大全

    在Spring1.2或之前的版本中,实现AOP的传统方式就是通过实现Spring的AOP API来定义Advice,并设置代理对象。Spring根据Adivce加入到业务流程的时机的不同,提供了四种不同的Advice:Before Advice、After Advice、...

    spring aop API示例

    演示了spring对aop的before、after、throw、around几种advice的api操作。

    Spring实现AOP的四种方式

    1. 配置ProxyFactoryBean,显式地设置advisors, advice, target等(基于代理的AOP ) 2. 配置AutoProxyCreator,这种方式下,还是如以前一样使用定义的bean,但是从容器中获得的其实已经是代理对象 3. 通过<aop:...

    Spring AOP详细介绍.docx

    (3)Advice(通知):AOP在特定的切入点上执行的增强处理,有before,after,afterReturning,afterThrowing,around (4)Pointcut(切入点):就是带有通知的连接点,在程序中主要体现为书写切入点表达式 (5)AOP代理:AOP框架...

    spring aop 实现源代码--xml and annotation(带lib包)

    在Spring1.2或之前的版本中,实现AOP的传统方式就是通过实现Spring的AOP API来定义Advice,并设置代理对象。Spring根据Adivce加入到业务流程的时机的不同,提供了四种不同的Advice:Before Advice、After Advice、...

    spring aop 详细介绍

    一. 准备工作 二. Spring -Aop入门 三. Spring-Aop 前置通知、后置通知、环绕通知、异常通知实现 四. Spring-Aop 之Pointcut+advice+Advisor 实现 五.Spring-Aop 引入的介绍

    spring代码课堂笔记

    Spring AOP Advice接口:只能对当前接口下所有的实现类进行次要业务绑定执行,无法动态指定 Spring AOP Advisor:(顾问) 1.一种织入方式 2.实际上Adivce封装版。 3.可以动态的将切面指定对应切入点 Spring...

    Spring AOP中文教程

    Spring framework是很有前途的AOP技术。作为一种非侵略性的,轻型的AOP framework,你无需使用预编译器或其他的元标签,便可以在Java程序中使用它。这意味着开发团队里只需一人要对付AOP framework,其他人还是象...

    Spring AOP - Advice

    Source 博文链接:https://icz.iteye.com/blog/186074

    springboot2-spring5-studying:Springboot2,Spring源码学习项目,涉及SpringBoot2自动装配实现机制,Spring AOP动态代理以及IOC各种扩展接口的实现方式

    微信公众号:吉姆餐厅ak学习更多原始知识,欢迎关注。 概述Spring Aop在Spring框架中的布局举足轻重,主要用于实现事务,缓存,安全等功能。... advice :通知,也就是aop中增强的方法。对以上三类核心类对应的UML分别

    【Spring AOP】@Aspect结合案例详解(二): @Pointcut使用@within和within

    上文我们已讲完五种通知Advice注解,所以从本文开始介绍@Pointcut切点表达式,虽然Spring AOP的切点表达式尚未 全部实现 @AspectJ 的切点指示符,但是也已经足够多和灵活,本文主要介绍@Pointcut切点表达式中的@...

    Java八股文-Spring AOP

    切点用于来限定Spring-AOP启动的范围,通常我们采用表达式的方式来设置,所以关键词 是范围 通知(Advice) 通知是织入到目标类连接点上的一段程序代码。在Spring中,像 BeforeAdvice等还带有方位信息 通知是直译...

    【Spring AOP】@Aspect结合案例详解(一): @Pointcut使用@annotation + 五种通知

    在微服务流行的当下,在使用SpringCloud/Springboot框架开发中,AOP使用的非常广泛,尤其是@Aspect注解方式当属最流行的,不止功能强大,性能也很优秀,还很舒心!所以本系列就结合案例详细介绍@Aspect方式的切面的...

Global site tag (gtag.js) - Google Analytics