Aspectj:源代码和字节码级别的编织器,用户需要使用不同于Java的新语言。
AspectWerkz:AOP框架,使用字节码动态编织器和XML配置。
JBoss-AOP:基于拦截器和元数据的AOP框架,运行在JBoss应用服务器上。以及在AOP中用到的一些相关的技术实现。
BCEL:java字节码操作类库。
Javassist:Java字节码操作类库,JBoss的一个子项目。
三种织入方式:编译期织入、类加载期织入和运行期织入。
编译期织入是指在Java编译期,采用特殊的编译器,将切面织入到Java类中;
而类加载期织入则指通过特殊的类加载器,在类字节码加载到JVM时,织入切面;
运行期织入则是采用CGLib工具或JDK动态代理进行切面的织入。
AspectJ采用编译期织入和类加载期织入的方式织入切面,是语言级的AOP实现,提供了完备的AOP支持。它用AspectJ语言定义切面,在编译期或类加载期将切面织入到Java类中。
Spring AOP的实现和其他特性的实现一样,除了可以使用Spring本身提供的AOP实现之外,还封装了业界优秀的AOP解决方案Aspectj来供应用使用。
Advice通知:
Advice定义在连接点做什么,为切面增强提供织入接口。
Advice是AOP联盟定义的一个接口,org.aopalliance.aop.Advice。
在Spring AOP实现中,使用了这个统一接口,并通过这个接口,为AOP切面增强了织入功能做了很多的细化和扩展,比如提供了更具体的通知类型,如BeforeAdvice、AfterAdvice、ThrowsAdvice等。
BeforeAdvice又演变出子接口MethodBeforeAdvice,有一个方法before,具体什么意思也不用多说。
AfterAdvice演变子接口AfterReturningAdvice,有一个方法afterReturning。
ThrowsAdvice并没有指定接口方法,但是你可以看到他继承自AfterAdvice。
Pointcut切点:
Pointcut来定义需要增强的方法的集合。
Pointcut要返回一个MethodMatcher来判断是否需要对方法调用进行增强。
其中的一个实现JdkRegexpMethodPointcut,完成了通过正则表达式完成了对方法名进行匹配的功能。
而且JdkRegexpMethodPointcut还实现了MethodMatcher接口。
JdkRegexpMethodPointcut中实现了AbstractRegexpMethodPointcut中的抽象方法matches,并用jdk的正则表达式完成匹配。
Advisor通知器:
完成对目标的切面设计Advice和关注点设计Pointcut以后,需要一个对象把他们结合起来。
DefaultPointcutAdvisor-
public DefaultPointcutAdvisor(Pointcut pointcut, Advice advice) {
this.pointcut = pointcut;
setAdvice(advice);
}
类中还有个TruePointcut的单例默认值,一直返回true。
上面提到的几个类实现都非常简单,因为,他们基本就只是属于一个“数据形式的定义”。
AOP简介
通知(Advice):通知定义了切面是什么以及何时使用。除了要描述切面要完成的工作,通知还解决了何时执行这个工作的问题。
连接点(Joinpoint):连接点是在程序执行过程中能够插入切面的一个点。这个点可以是方法被调用时、异常被抛出时、甚至字段被编辑时。切面代码可以通过这些点插入到程序的一般流程之中,从而添加新的行为。
切入点(Poincut):切入点可以缩小切面通知的连接点的范围。如果说通知定义了切面的“什么”和“何时”,那么切入点就定义了“何地”。
切面(Aspect):切面是通知和切入点的组合。
引入(Introduction):“引入”允许我们向现有的类添加新方法或者属性。
目标(Target):被通知的对象。
代理(Proxy):是向目标对象应用通知之后被创建的对象。
织入(Weaving):是把切面应用到目标对象来创建新的代理对象的过程。编译时、类加载时、运行时。
在Spring AOP实现中,使用的核心技术是动态代理。
通过JDK的动态代理特性,可以为任意Java对象创建代理对象,这个特性是通过Java Reflection API来完成的。
相反Spring AOP还将ApsectJ集成了进来。
这个代理对象可以通过使用JDK的proxy来完成,也可以通过第三方的类生成器CGLIB来完成。
接口org.springframework.beans.factory.FactoryBean<T>:
做为bean的创建的一个工厂,通过是三个方法T getObject() 、Class<?> getObjectType()、boolean isSingleton()可以看出,实现他可以作为一个bean创建的代理对象返回。
首先FactoryBean是我们的主接口,这里面的定义就是我们需要的结果,但是下面会围绕这个接口定义了一些列接口,包括资源、“算法”等操作,最终得到我们这个接口想要的东西。
----------------资源相关Aware--------------
接口org.springframework.beans.factory.Aware:
本接口没有定义任何方法,只是 作为一个超类接口存在;Marker superinterface indicating that a bean is eligible to be notified by the Spring container of a particular framework object through a callback-style method.
接口org.springframework.beans.factory.BeanFactoryAware:
继承Aware
就一个方法void setBeanFactory(BeanFactory beanFactory),定义了BeanFactory的回调注入。
接口org.springframework.beans.factory.BeanClassLoaderAware:
继承Aware
一个方法void setBeanClassLoader(ClassLoader classLoader),定义ClassLoader的回调注入。
接口org.springframework.aop.TargetClassAware:
没有继承自Aware,上面的Aware是bean相关的。这个是aop相关的。
定义一个方法Class<?> getTargetClass(),目标类获取。就是我们配置里面的<property name="target" ref="..."></property>
-----------------Advised--------------------
接口org.springframework.aop.framework.Advised:
和名字一样,Advised想干的一些资源管理。
org.springframework.aop.framework.ProxyConfig:
一些标识的存放,保证一致性。
org.springframework.aop.framework.AdvisedSupport:
Advised的实现支持类,包括对各种配置资源的管理。从调用本类的参数命名定义上AdvisedSupport config,可以知道本类就是一个资源的快照类。
org.springframework.aop.framework.ProxyCreatorSupport:
Base class for proxy factories. Provides convenient access to a configurable AopProxyFactory.
真正的创建是在AopProxy的两个是实现,对AopProxy实现的判断提供是在于AopProxyFactory,本类就是对AopProxyFactory的提供(不是AopProxyFactory的实现是提供)。
/**
* Create a new ProxyCreatorSupport instance.
*/
public ProxyCreatorSupport() {
this.aopProxyFactory = new DefaultAopProxyFactory();
}
因为本类也继承自AdvisedSupport,包含了各种所需资源。
------------------最终的创建:AopProxy---------------------
接口org.springframework.aop.framework.AopProxy:
Delegate interface for a configured AOP proxy, allowing for the creation of actual proxy objects.
两个方法Object getProxy()、Object getProxy(ClassLoader classLoader)。
AopProxy的两个重要实现Cglib2AopProxy、JdkDynamicAopProxy,也是我们最终产生AOP后的对象的地方。
接口org.springframework.aop.framework.AopProxyFactory:
整理结合需要创建AopProxy资源的地方,也是判断到底返回什么AopProxy实现类型的地方。
org.springframework.aop.framework.DefaultAopProxyFactory:
AopProxyFactory的唯一默认实现。以后我们如果想单独加入AopProxy的底层实现方式,可以从这里着手。
org.springframework.aop.framework.ProxyFactoryBean:
最终的出口
设计原理:
ProxyFactoryBean中,封装了主要代理对象的生成过程。在这个生成过程中,可以使用JDK的Proxy和CGLIB两种生成方式。
完成AOP应用的类,比如AspectJProxyFactory、ProxyFactory和ProxyFactoryBean,他们都在统一个类的继承体系下,都是ProxyConfig、AdvisedSupport和ProxyCreatorSupport的子类。
作为共同基类,可以将ProxyConfig看成是一个数据基类,这个数据基类为ProxyFactoryBean这样的子类提供了配置属性;
在另一个基类AdvisedSupport的实现中,封装了AOP对通知和通知器的相关操作,这些操作对于不同的AOP的代理对象的生成都是一样的,但对于具体的AOP代理对象的创建,AdvisedSupport把他交给他的子类们去完成;
对于ProxyCreatorSupport,可以将它看成是其子类创建AOP代理对象的一个辅助类。
使用ProxyFactoryBean:
代理(Proxy):是向目标对象应用通知之后被创建的对象
利用ProxyFactoryBean代理被切面的对象。
在这些callback回调中,对已AOP实现,是通过DynamicAdvisedInterceptor来完成的,回调入口是intercept方法。
可以把AOP的实现部分看成由基础设施设备和AOP运行辅助这两个部分组成,这里的AopProxy代理对象的生成,可以看做是一个AOP基础设施的建设过程。
通过这个准备过程,把代理对象、拦截器这些待调用的部门都准备好,等待AOP运行过程中对这些基础设施的使用。
对于应用出发AOP应用,会涉及AOP框架的运行和对AOP基础设施的使用。
这些动态的运行部分,是从前面提到的拦截器回调入口开始的,原理就是各种实现方案。
分享到:
相关推荐
Spring技术内幕:深入解析Spring架构与设计原理 Spring技术内幕 Spring是一个基于Java的开源框架,旨在简化Java企业应用的开发。Spring的目标是提供一个简洁、灵活、可扩展的框架,以帮助开发者快速构建企业级...
Spring技术内幕:深入解析Spring架构与设计原理 Spring是Java企业应用开发的主要框架之一,其架构和设计原理对Java开发者具有重要影响。本文将深入解析Spring架构和设计原理,对Spring的核心概念、架构设计和关键...
在深入解析Spring技术内幕第2版中,会详细探讨Spring框架的核心架构与设计原理,Spring作为一个轻量级的Java平台,提供了全面的编程和配置模型,是企业级Java应用程序开发中广泛使用的技术之一。 Spring的核心特性...
Spring技术内幕 深入解析Spring架构与设计原理1(完整清晰版),一共两部分,这是第一部分 《Spring技术内幕:深入解析Spring架构与设计原理》是Spring领域的问鼎之作,由业界拥有10余年开发经验的资深Java专家亲自...
《Spring技术内幕:深入解析Spring架构与设计原理(第2版)》这本书主要聚焦于Spring框架的核心架构和技术细节,帮助读者全面理解Spring的工作机制、设计理念以及实现方式。下面将根据书名及其描述来展开相关知识点。 ...
第一部分详细分析了Spring的核心:IoC容器和AOP的实现,能帮助读者了解Spring的运行机制;第二部分深入阐述了各种基于IoC容器和AOP的Java EE组件在Spring中的实现原理;第三部分讲述了ACEGI安全框架、DM模块以及Flex...
《Spring技术内幕:深入解析Spring架构与设计原理(第2版)》从源代码的角度对Spring的内核和各个主要功能模块的架构、设计和实现原理进行了深入剖析。你不仅能从本书中参透Spring框架的出色架构和设计思想,还能从...
《Spring技术内幕》是一本深度剖析Spring框架内部工作机制的专业书籍,旨在帮助读者深入理解Spring的工作原理,提升在实际开发中的应用水平。书签目录通常包含了书籍的主要章节和内容概述,对于学习者来说,是一个...
《Spring技术内幕》是一本深度剖析Spring框架架构...通过阅读《Spring技术内幕》,读者不仅能够理解Spring框架的底层实现,还能学习到如何更高效地使用Spring进行实际项目开发,提升自身在Java和Spring领域的专业素养。
Spring技术内幕 深入解析Spring架构与设计原理1(完整清晰版),一共两部分,这是第一部分 《Spring技术内幕:深入解析Spring架构与设计原理》是Spring领域的问鼎之作,由业界拥有10余年开发经验的资深Java专家亲自...
总之,《Spring技术内幕 学习笔记》涵盖了Spring框架的众多核心知识点,从IoC容器、AOP到Web开发和数据访问,对于提升Spring开发技能具有很高的价值。通过深入学习和实践,开发者能够更好地理解和掌握Spring框架,...
通过阅读《Spring技术内幕 - 深入解析Spring架构与设计原理》这本书,你可以深入了解Spring的内部工作机制,学习如何有效地利用IOC和AOP提高代码质量,同时掌握Spring其他高级特性的使用,从而提升自己的开发技能和...
Spring技术内幕:深入解析Spring架构与设计原理(第2部分) 《Spring技术内幕:深入解析Spring架构与设计原理》是Spring领域的问鼎之作,由业界拥有10余年开发经验的资深Java专家亲自执笔!Java开发者社区和Spring...
根据提供的文件标题“Spring技术内幕:深入解析Spring架构与设计原理(第2版)”和描述,我们可以了解到这是一本深入探讨Spring框架内部架构和技术细节的专业书籍。虽然标签中出现了“oracle”,但从标题和描述来看,...
《Spring技术内幕》是一本深度剖析Spring框架的专业书籍,它为Java程序员、Spring开发者、平台开发人员、系统架构师以及热衷于开源软件源代码研究的程序员提供了宝贵的资源。本书详细讲解了Spring的核心机制和设计...
《SPRING技术内幕:深入解析SPRING架构与设计原理》这本书深入探讨了Spring框架的核心机制、设计理念以及在实际开发中的应用。Spring作为Java领域最流行的轻量级框架,它的广泛应用和强大功能使得深入理解其工作原理...
×××Spring 技术内幕.zip.001 ×××Spring 技术内幕.zip.002 本书是spring领域的问鼎之作,由业界拥有10余年开发经验的资深java专家亲自执笔!java开发者社区和spring开发者社区一致强烈推荐。. 国内第一本...
总之,《Spring技术内幕+深入解析Spring架构与设计》是一本不可多得的技术书籍,它不仅能够帮助读者深入了解Spring框架的设计理念和实现机制,还能激发读者对于Java语言本身的兴趣和探索欲望。无论是对于职业发展...
《Spring技术内幕》这本书深入探讨了Spring框架的核心概念和实现机制,是理解Spring工作原理的重要参考资料。Spring作为Java企业级应用开发的主流框架,它的设计理念、模块架构以及各种功能组件都对开发者有着深远...
《Spring技术内幕(第2版)》这本书是深入解析Spring架构与设计原理的一部作品,作者对Spring框架的内部结构和设计思想进行了详细的分析和讲解,是Spring框架学习者和使用者的宝贵资源。 Spring框架是目前Java开发...