首先接上一篇文章,我们来看看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(面向切面编程)是Spring框架的重要组成部分,它提供了一种模块化和声明式的方式来处理系统中的交叉关注点问题,如日志、事务管理、安全性等。本示例将简要介绍如何在Spring应用中实现AOP,通过实际的...
在Spring AOP中,切面由通知(Advice)和切点(Pointcut)定义。 2. **通知(Advice)**:通知是在特定连接点(Join Point)执行的代码,例如方法调用前、后或者异常发生时。Spring AOP支持五种类型的通知:前置...
Spring AOP中有五种不同类型的的通知(Advice): 1. 前置通知(Before Advice):在方法执行前执行,使用`@Before`注解。 2. 返回后通知(After Returning Advice):在方法正常返回后执行,使用`@AfterReturning`...
### Spring AOP 入门详解 #### 一、Spring AOP 概述 Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的一个关键特性,它为开发者提供了在运行时动态添加代码(即横切关注点或切面)到已有...
Spring AOP,全称Aspect-Oriented Programming(面向切面编程),是Spring框架的一个重要模块,它通过提供声明式的方式来实现面向切面编程,从而简化了应用程序的开发和维护。在Spring AOP中,我们无需深入到每个...
3. **启用AOP**:为了使Spring识别并处理切面,我们需要在配置中启用AOP代理。在Java配置中,可以添加`@EnableAspectJAutoProxy`注解;在XML配置中,使用<aop:aspectj-autoproxy>元素。 4. **源码分析**:了解...
**Spring AOP 配置实现详解** Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的重要组成部分,它允许我们通过分离关注点来简化应用程序的开发。在传统的面向对象编程中,业务逻辑与日志记录...
3. **灵活的通知模型**:Spring AOP提供了多种类型的通知,包括around、before、after returning、after throwing等,使得开发者可以根据实际需求选择最适合的通知类型。 4. **丰富的切入点表达式语言**:Spring ...
Spring AOP(面向切面编程)是Spring框架的重要组成部分,它提供了一种强大的方式来实现横切关注点,如日志、事务管理、性能监控等,而无需侵入业务代码。下面将详细介绍Spring AOP的注解方式和XML配置方式。 ### ...
现在,我们回到主题——"springaop依赖的jar包"。在Spring 2.5.6版本中,使用Spring AOP通常需要以下核心jar包: - `spring-aop.jar`:这是Spring AOP的核心库,包含了AOP相关的类和接口。 - `spring-beans.jar`:...
在本示例中,"springaop.zip" 包含了一个使用XML配置的Spring AOP应用实例,可以直接运行,配合相关的博客文章学习效果更佳。 在Spring AOP中,我们首先需要了解几个核心概念: 1. **切面(Aspect)**:切面是关注...
**Spring AOP 实现机制详解** Spring AOP(面向切面编程)是Spring框架的核心特性之一,它允许程序员在不修改源代码的情况下,通过“切面”来插入额外的业务逻辑,如日志、事务管理等。AOP的引入极大地提高了代码的...
Spring AOP,全称Aspect Oriented Programming(面向切面编程),是Spring框架的重要组成部分,它扩展了传统的面向对象编程(OOP),使得开发者能够更好地处理系统中的横切关注点,如日志、事务管理、权限控制等。...
5. 解析 Advice:在解析 Aspect 配置时,Spring AOP 也会解析 Advice 配置,例如 `<aop:before>` 标签。在这个过程中,Spring AOP 使用 adviceParser 来解析 Advice 配置,并生成相应的 Bean 定义对象。 6. 注册 ...
3. spring-context.jar:提供了上下文支持,包括AOP的配置和声明式事务管理。 4. spring-core.jar:Spring的核心工具包,包含核心的IoC(Inversion of Control)服务和基本的类型转换系统。 5. aspectjrt.jar:...
**Spring AOP 管理XML版详解** 在Spring框架中,面向切面编程(Aspect Oriented Programming,简称AOP)是一种重要的设计模式,它扩展了传统的面向对象编程(OOP),使得我们可以将关注点分离,特别是那些横切关注...
Spring AOP(面向切面编程)是Spring框架的重要组成部分,它允许程序员在不修改源代码的情况下,通过在运行时插入额外的行为(如日志记录、性能监控等)来增强对象的功能。动态代理则是Spring AOP实现的核心技术之一...
3. 在配置AOP时,确保Spring容器已经启用AOP支持,即`<aop:config>`标签的存在。 通过上述XML配置,我们可以灵活地控制Spring AOP的各个元素,实现面向切面的编程,提升代码的可读性和可维护性。了解并熟练掌握这些...
SpringAOP Spring AOP(面向方面的编程)用于模块化“横截面”服务。 用一种简单的方式,我们可以说它是一个旨在拦截某些进程的组件,例如,在执行某个方法时,Spring AOP可以审核该执行方法,并在该方法执行...
3. **配置 Spring AOP** 在 Spring 配置文件中,需要启用 AOP 并配置切面。以下是一个基本示例: ```xml <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi=...