AOP
来源:互联网 发布:检测移动硬盘的软件 编辑:程序博客网 时间:2024/04/30 18:50
什么是AOP
-----------------------------------
AOP(Aspect Oriented Programming)是面向对象编程(OOP)的补充。OOP以类为核心,而AOP以切片(Aspect)为编程核心。AOP可以在纵向上给一批对象添加模块化的功能,如事务管理、日志管理等。
AOP中的一些术语
-----------------------------------
Aspect:切片,在纵向上给多个类添加模块化的功能。
Join Point:切入点,如一个方法的执行或一个异常的处理。
Advice:可以当成是放在切入点上的拦截器(Interceptor),这些拦截器可以放在方法前、中、后、异常抛出后。
Pointcut:匹配Join Pint的表达式或称之为算法。
Introduction:通过切片为一些类添加一些方法或属性,Spring中通过给目标对象注入接口及实现来完成Introduction的功能。
Target Object:被切片切到的对象。
AOP Proxy:为Target Object创建代理对象,以便执行相应的Advice,Spring中通过JDK Dynamic Proxy和CGLIB实现AOP Proxy。
Weaving:即将Aspect应用到目标对象,可以发生在编译阶段(Compile Time)、加载阶段(Load Time)、运行阶段(Runtime)。Spring AOP是在Runtime阶段进行Weaving。
Spring中的AOP
-----------------------------------
Spring2.0之前和之后版本的AOP最大区别就在Pointcut上,2.0之后的可以通过aspectj表达式来匹配Join point。而早期的只能通过底层的AOP API来完成,即使有ProxyFactoryBean这样的类,配置也不优雅。
Spring AOP只做到方法级别的AOP,即针对方法进行切片,它认为这已足够企业应用使用了。
Pointcut Expression--Pointcut 表达式
-----------------------------------
execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern) throws-pattern?)
execution是用得最多的表达式,用来匹配方法。
有问号的是可选的。
*代表任意类型。
参数()代表无参数。
(*)代表参数个数为1,类型任意。
(..)代表任意个数的参数。
(*,String)代表两个参数,第一个类型任意,第二个为String类型。
execution(* com.xyz.service.*.*(..))
在service包下所有类的所有方法
execution(* com.xyz.service..*.*(..))
在service包及子包下的所有类的所有方法
-----------------------------------
AOP(Aspect Oriented Programming)是面向对象编程(OOP)的补充。OOP以类为核心,而AOP以切片(Aspect)为编程核心。AOP可以在纵向上给一批对象添加模块化的功能,如事务管理、日志管理等。
AOP中的一些术语
-----------------------------------
Aspect:切片,在纵向上给多个类添加模块化的功能。
Join Point:切入点,如一个方法的执行或一个异常的处理。
Advice:可以当成是放在切入点上的拦截器(Interceptor),这些拦截器可以放在方法前、中、后、异常抛出后。
Pointcut:匹配Join Pint的表达式或称之为算法。
Introduction:通过切片为一些类添加一些方法或属性,Spring中通过给目标对象注入接口及实现来完成Introduction的功能。
Target Object:被切片切到的对象。
AOP Proxy:为Target Object创建代理对象,以便执行相应的Advice,Spring中通过JDK Dynamic Proxy和CGLIB实现AOP Proxy。
Weaving:即将Aspect应用到目标对象,可以发生在编译阶段(Compile Time)、加载阶段(Load Time)、运行阶段(Runtime)。Spring AOP是在Runtime阶段进行Weaving。
Spring中的AOP
-----------------------------------
Spring2.0之前和之后版本的AOP最大区别就在Pointcut上,2.0之后的可以通过aspectj表达式来匹配Join point。而早期的只能通过底层的AOP API来完成,即使有ProxyFactoryBean这样的类,配置也不优雅。
Spring AOP只做到方法级别的AOP,即针对方法进行切片,它认为这已足够企业应用使用了。
Pointcut Expression--Pointcut 表达式
-----------------------------------
execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern) throws-pattern?)
execution是用得最多的表达式,用来匹配方法。
有问号的是可选的。
*代表任意类型。
参数()代表无参数。
(*)代表参数个数为1,类型任意。
(..)代表任意个数的参数。
(*,String)代表两个参数,第一个类型任意,第二个为String类型。
execution(* com.xyz.service.*.*(..))
在service包下所有类的所有方法
execution(* com.xyz.service..*.*(..))
在service包及子包下的所有类的所有方法
- AOP
- AOP
- AOP
- AOP
- AOP
- AOP
- AOP
- AOP
- AOP
- AOP
- AOP
- AOP
- AOP
- AOP
- AOP
- aop
- AOP
- AOP
- JS Mapping
- c和python利用setsockopt获得端口重用
- C codes for VirginiaJ
- jsp参数传递的方法
- 【转】.NET Framework各版本比较
- AOP
- Cannot create a session after the response has been committed
- 创意loading设计
- oracle锁机制
- SEO优化工具
- BeanUtils.copyProperties()的用法
- CSS文字换行始末
- 类似QQ消息提示的任务栏窗口图标的高亮显示方法
- POJ 1523 SPF 无向图求割点