Spring的AOP初步了解(四)
2015-05-05 17:14
246 查看
Spring AOP的初步实现:
采用AspectJ实现AOP,它是基于java语言的AOP框架。
对于AspectJ的简单例子可以参考D:AOP,可以从反编译中看到,经过ajc 指令编译后,那些.class文件都发生了改变!也就是说AspectJ是编译时增强的AOP框架。
对于需要增强的类 采用aspect 关键字来定义类名。这里可以采用正则表达式的方式去匹配需要的方法名;
AOP的一些基本概念:
切面(Aspect):业务流程运行的某个特定步骤,也就是应用运行过程的关注点,关注点可能横切多个对象,所以也常常称为横切关注点。
连接点(Joinpoint):程序执行过程中明确的点,如方法的调用,或者异常的抛出,Spring AOP中,连接点总是调用的方法。
增强处理(Advice):AOP框架在特定的切入点执行增强处理,有“around”、“before”、和“after”等类型。
切入点(Pointcut):可以插入增强处理的连接点,简而言之,当某个连接点满足指定的要求的时候,该连接点被添加增强处理,该连接点也就成了切入点。(一个过程)
引入:将方法或字段添加到被处理的类中。
目标对象:被AOP框架进行增强处理的对象。乳沟是通过运行时代理来实现的,那就是一个被代理对象。
AOP代理:AOP框架创建的对象,简单地说,代理就是对目标对象的加强。Spring中的AOP代理可以使JDK动态代理,也可以是CGLIB代理。前者为实现接口的目标对象的代理,后者为不实现接口的目标对象代理。
织入(Weaving):将增强处理添加到目标对象中,并创建一个被增强的对象(AOP代理)的过程就是织入。有两种方式:编译时增强(例如AspectJ)和运行时增强(例如CGLIB).
Spring和其他纯Java AOP框架一样,在运行时织入。
Spring 有两种方式来定义切入点和增强处理:
基于Annotation的“零配置”:@Aspect、@Pointcut、等Annotation来标注
基于XML配置文件的管理,Spring配置文件来定义切入点、增强
Spring的“零配置”,需要对Spring的配置文件中加入:
<xmlns:aop=http://www.xxxx.xxxx.xxxx.schema/aop http://www.springframework.org/schema/aop ……
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd>
<!—启动!@AspectJ支持 -->
<aop:aspectj-autoproxy/>
@Aspect标注一个java类,该java类将会作为切面Bean。
@Before :在切面类里面使用@Before来标注一个方法时,通常需要指定一个value属性值,该属性值指定一个切入点表达式(既可以是一个已有切入点,也可以直接定义切入点表达式),用于指定该增强处理将被织入哪些切入点。
例子:
@Aspect
Public class BeforeAdviceTest{
@Before(“ execution ( * org.crazyit.app.service.impl.*.*(…) ) ”)
}
@afterReturning(pointcut / value, returning )
@AfterThrowing(Pointcut/ value , throwing)
@After()
@Around()
基于XML配置文件的管理方式:
XML的优点:
适用于JDK1.5以前的版本
对早期的Spring用户更习惯
XML的缺点:
XML不能将切面、切入点、增强处理等封装到一个地方。查看这些的时候得从Java文件和XML中一起查看。
XML的配置方式比@AspectJ方式有更多的限制:仅支持“singleton”切面Bean,不能在XML中组合多个命名连接点的声明。
Spring的配置文件中,所有的切面、切入点和增强处理都必须定义在<aop:config……/>元素的内部。<beans……/>元素下可以包含多个<aop:config……/>元素,一个<aop:config……/>可以包含pointcut、advisor和aspect元素,且这三个元素必须按照此顺序来定义。关于<aop:config……/>元素所包含的元素:
pointcut、advisor、aspect
配置切面:
<aop:aspect ……/>元素有三个指定的属性:
Id:定义该切面的标识名。
Ref:指定以指定ref属性所引用的普通Bean作为切面Bean。
Order:指定该切面Bean的优先级,该属性的作用与前面@AspectJ中的@OrderAnnotatio Ordered一样,order属性值越小,优先级越高。
<aop:aspect id=”afterAdviceAspect” ref=”afterAdviceBean” > ……
配置增强:
<aop:before ……/>
<aop:after ……/>
<aop:after-returning ……/>
<aop:after-throwing ……/>
<aop:around ……/>
它们的几个属性:
pointcut:该属性指定一个切入表达式,Spring将在匹配该表达式的连接点时织入该增强处理。
pointcut-ref:该属性指定一个已经存在的切入点名称,通常pointcut和pointcut-ref两个属性只需要其中的一个就行。
method:指定一个方法名,指定切面Bean的该方法将作为增强处理。
throwing:只对<after-throwing…/>有效,指定一个形参名,AfterReturning增强 可以通过该形参 访问目标方法所抛出的异常。
returning:该属性只对<after-throwing…/>有效,用于指定一个形参名,AfterReturning增强方法可以通过该形参访问目标方法的返回值。
采用AspectJ实现AOP,它是基于java语言的AOP框架。
对于AspectJ的简单例子可以参考D:AOP,可以从反编译中看到,经过ajc 指令编译后,那些.class文件都发生了改变!也就是说AspectJ是编译时增强的AOP框架。
对于需要增强的类 采用aspect 关键字来定义类名。这里可以采用正则表达式的方式去匹配需要的方法名;
AOP的一些基本概念:
切面(Aspect):业务流程运行的某个特定步骤,也就是应用运行过程的关注点,关注点可能横切多个对象,所以也常常称为横切关注点。
连接点(Joinpoint):程序执行过程中明确的点,如方法的调用,或者异常的抛出,Spring AOP中,连接点总是调用的方法。
增强处理(Advice):AOP框架在特定的切入点执行增强处理,有“around”、“before”、和“after”等类型。
切入点(Pointcut):可以插入增强处理的连接点,简而言之,当某个连接点满足指定的要求的时候,该连接点被添加增强处理,该连接点也就成了切入点。(一个过程)
引入:将方法或字段添加到被处理的类中。
目标对象:被AOP框架进行增强处理的对象。乳沟是通过运行时代理来实现的,那就是一个被代理对象。
AOP代理:AOP框架创建的对象,简单地说,代理就是对目标对象的加强。Spring中的AOP代理可以使JDK动态代理,也可以是CGLIB代理。前者为实现接口的目标对象的代理,后者为不实现接口的目标对象代理。
织入(Weaving):将增强处理添加到目标对象中,并创建一个被增强的对象(AOP代理)的过程就是织入。有两种方式:编译时增强(例如AspectJ)和运行时增强(例如CGLIB).
Spring和其他纯Java AOP框架一样,在运行时织入。
Spring 有两种方式来定义切入点和增强处理:
基于Annotation的“零配置”:@Aspect、@Pointcut、等Annotation来标注
基于XML配置文件的管理,Spring配置文件来定义切入点、增强
Spring的“零配置”,需要对Spring的配置文件中加入:
<xmlns:aop=http://www.xxxx.xxxx.xxxx.schema/aop http://www.springframework.org/schema/aop ……
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd>
<!—启动!@AspectJ支持 -->
<aop:aspectj-autoproxy/>
@Aspect标注一个java类,该java类将会作为切面Bean。
@Before :在切面类里面使用@Before来标注一个方法时,通常需要指定一个value属性值,该属性值指定一个切入点表达式(既可以是一个已有切入点,也可以直接定义切入点表达式),用于指定该增强处理将被织入哪些切入点。
例子:
@Aspect
Public class BeforeAdviceTest{
@Before(“ execution ( * org.crazyit.app.service.impl.*.*(…) ) ”)
}
@afterReturning(pointcut / value, returning )
@AfterThrowing(Pointcut/ value , throwing)
@After()
@Around()
基于XML配置文件的管理方式:
XML的优点:
适用于JDK1.5以前的版本
对早期的Spring用户更习惯
XML的缺点:
XML不能将切面、切入点、增强处理等封装到一个地方。查看这些的时候得从Java文件和XML中一起查看。
XML的配置方式比@AspectJ方式有更多的限制:仅支持“singleton”切面Bean,不能在XML中组合多个命名连接点的声明。
Spring的配置文件中,所有的切面、切入点和增强处理都必须定义在<aop:config……/>元素的内部。<beans……/>元素下可以包含多个<aop:config……/>元素,一个<aop:config……/>可以包含pointcut、advisor和aspect元素,且这三个元素必须按照此顺序来定义。关于<aop:config……/>元素所包含的元素:
pointcut、advisor、aspect
配置切面:
<aop:aspect ……/>元素有三个指定的属性:
Id:定义该切面的标识名。
Ref:指定以指定ref属性所引用的普通Bean作为切面Bean。
Order:指定该切面Bean的优先级,该属性的作用与前面@AspectJ中的@OrderAnnotatio Ordered一样,order属性值越小,优先级越高。
<aop:aspect id=”afterAdviceAspect” ref=”afterAdviceBean” > ……
配置增强:
<aop:before ……/>
<aop:after ……/>
<aop:after-returning ……/>
<aop:after-throwing ……/>
<aop:around ……/>
它们的几个属性:
pointcut:该属性指定一个切入表达式,Spring将在匹配该表达式的连接点时织入该增强处理。
pointcut-ref:该属性指定一个已经存在的切入点名称,通常pointcut和pointcut-ref两个属性只需要其中的一个就行。
method:指定一个方法名,指定切面Bean的该方法将作为增强处理。
throwing:只对<after-throwing…/>有效,指定一个形参名,AfterReturning增强 可以通过该形参 访问目标方法所抛出的异常。
returning:该属性只对<after-throwing…/>有效,用于指定一个形参名,AfterReturning增强方法可以通过该形参访问目标方法的返回值。
相关文章推荐
- Spring 学习之路(八):Spring 中的AOP(一):aop初步了解
- Spring AOP初步了解
- Spring AOP 初步
- Spring 和aop初步
- Spring核心技术原理-(2)-通过Web开发演进过程了解一下为什么要有Spring AOP?
- spring AOP初步总结
- Aop初步了解
- Spring AOP编程问题:下面代码哪里错了?可以考验对Spring AOP的实现机制是否了解的
- Spring AOP详解 一.前言 在以前的项目中,很少去关注spring aop的具体实现与理论,只是简单了解了一下什么是aop具体怎么用,看到了一篇博文写得还不错,就转载来学习一下,博
- 【Spring】AOP了解加实现
- spring-boot-笔记-2-thymeleaf初步了解
- Spring学习(二)——Spring中的AOP的初步理解[转]
- Spring核心技术原理-(2)-通过Web开发演进过程了解一下为什么要有Spring AOP?
- Spring核心技术原理-(2)-通过Web开发演进过程了解一下为什么要有Spring AOP?
- Spring AOP初步介绍
- SPRING 了解初步
- 带你逐步深入了解SSH框架——spring的ioc操作(注解)和aop概念
- Spring初步了解
- SpringSession 初步了解
- 关于spring AOP 的初步学习