//*********************概念:
1、一些名词解释
切面(Aspect):其实就是共有功能的实现。如日志切面、权限切面、事务切面等。
在实际应用中通常是一个存放共有功能实现的普通Java类,之所以能被AOP容器识别成切面,是在配置中指定的。
通知(Advice:增强):是切面的具体实现。以目标方法为参照点,根据放置的地方不同,可分为前置通知(Before)、后置通知(AfterReturning)、异常通知(AfterThrowing)、最终通知(After)与环绕通知(Around)5种。
在实际应用中通常是切面类中的一个方法,具体属于哪类通知,同样是在配置中指定的。
增强是植入到目标类连接点上的一段程序代码:(黑客:往业务类中准入木马?)
增强:除了描述一段程序代码外,还拥有另一个和连接点相关的信息,这便是执行点的方位了;所以,spring所提供的增强接口都是带有方位的:AfterReturningAdvice等等
所以,只有结合切点和增强两者一起才能确定特定的连接点,并实施增强;
连接点(Joinpoint):就是程序在运行过程中能够插入切面的地点。例如,方法调用、异常抛出或字段修改等,
但Spring只支持方法级的连接点。
程序执行的某个特定的位置:如类的初始化前,后;某个方法调用前、后等等(连接点就是AOP向目标类打入锲子的候选点)
连接点有两个信息确定:
1、用方法表示的程序执行点;
2、用相对点表示的方位
每个程序类中都有多个连接点(),连接点是程序类客观存在的事务;
在众多连接点中,如何找到我们感兴趣的点呢?
/*
Test.save()执行前的连接点:执行点为:Test.save(),方位:该方法执行前的位置;
*/
//spring中使用切点对执行点进行定位;而方位是在增强里面定义的;
切入点(Pointcut):用于定义通知应该切入到哪些连接点上。不同的通知通常需要切入到不同的连接点上,这种精准的匹配是由切入点的正则表达式来定义的。
AOP通过"切点"定位特定的连接点;
//切点和连接点的区别和理解;
连接点相当于数据库中的记录;而切入点相当于查询条件;
在AOP中切点,通过:aop.pointCut接口声明;通过类和方法作为连接点的查询条件,AOP解析切点所设定的查询条件,找到对应的连接点;但是实际上上
不能称为查询连接点;因为切点指定为到某个放上上,所以定位到确定的点,还需要方位信息;
切入点表达式用于指定哪些对象和方法调用方面功能.
execution(修饰符? 返回类型 方法名(参数) throws 异常类型? )
目标对象(Target):就是那些即将切入切面的对象,也就是那些被通知的对象。这些对象中已经只剩下干干净净的核心业务逻辑代码了,所有的共有功能代码等待AOP容器的切入。
代理对象(Proxy):将通知应用到目标对象之后被动态创建的对象。可以简单地理解为,代理对象的功能等于目标对象的核心业务逻辑功能加上共有功能。代理对象对于使用者而言是透明的,是程序运行过程中的产物。
织入(Weaving):将切面应用到目标对象从而创建一个新的代理对象的过程。这个过程可以发生在编译期、类装载期及运行期,当然不同的发生点有着不同的前提条件。譬如发生在编译期的话,就要求有一个支持这种AOP实现的特殊编译器;
发生在类装载期,就要求有一个支持AOP实现的特殊类装载器;只有发生在运行期,则可直接通过Java语言的反射机制与动态代理机制来动态实现。
2、面向切面编程:就是在原直线编程的某处咔嚓一下,加点动西,而且不影响原来的代码。可以用在日志,加权限,事物,异常管理等方面;
AOP面向切面编程:意思是将非核心业务功能与核心业务功能分开,通过配置文件再将其整合在一起
3、定义切面切入规则:
参数模式稍微有点复杂:() 匹配了一个不接受任何参数的方法, 而 (..) 匹配了一个接受任意数量参数的方法(零或者更多)。
模式 (*) 匹配了一个接受一个任何类型的参数的方法。 模式 (*,String) 匹配了一个接受两个参数的方法,第一个可以是任意类型,第二个则必须是String类型。
//********************************************************************************************************************************
4、按照软件重构的思想,如果多个类中出现了相同的代码,应该考虑定义一个共同的抽象类,相同类提取出来放到这个类中
这种思想有时候还是不能满足现实条件:
/*************************************纵向继承体系 PK 横向抽取机制*******************************************/
1、一些名词解释
切面(Aspect):其实就是共有功能的实现。如日志切面、权限切面、事务切面等。
在实际应用中通常是一个存放共有功能实现的普通Java类,之所以能被AOP容器识别成切面,是在配置中指定的。
通知(Advice:增强):是切面的具体实现。以目标方法为参照点,根据放置的地方不同,可分为前置通知(Before)、后置通知(AfterReturning)、异常通知(AfterThrowing)、最终通知(After)与环绕通知(Around)5种。
在实际应用中通常是切面类中的一个方法,具体属于哪类通知,同样是在配置中指定的。
增强是植入到目标类连接点上的一段程序代码:(黑客:往业务类中准入木马?)
增强:除了描述一段程序代码外,还拥有另一个和连接点相关的信息,这便是执行点的方位了;所以,spring所提供的增强接口都是带有方位的:AfterReturningAdvice等等
所以,只有结合切点和增强两者一起才能确定特定的连接点,并实施增强;
连接点(Joinpoint):就是程序在运行过程中能够插入切面的地点。例如,方法调用、异常抛出或字段修改等,
但Spring只支持方法级的连接点。
程序执行的某个特定的位置:如类的初始化前,后;某个方法调用前、后等等(连接点就是AOP向目标类打入锲子的候选点)
连接点有两个信息确定:
1、用方法表示的程序执行点;
2、用相对点表示的方位
每个程序类中都有多个连接点(),连接点是程序类客观存在的事务;
在众多连接点中,如何找到我们感兴趣的点呢?
/*
Test.save()执行前的连接点:执行点为:Test.save(),方位:该方法执行前的位置;
*/
//spring中使用切点对执行点进行定位;而方位是在增强里面定义的;
切入点(Pointcut):用于定义通知应该切入到哪些连接点上。不同的通知通常需要切入到不同的连接点上,这种精准的匹配是由切入点的正则表达式来定义的。
AOP通过"切点"定位特定的连接点;
//切点和连接点的区别和理解;
连接点相当于数据库中的记录;而切入点相当于查询条件;
在AOP中切点,通过:aop.pointCut接口声明;通过类和方法作为连接点的查询条件,AOP解析切点所设定的查询条件,找到对应的连接点;但是实际上上
不能称为查询连接点;因为切点指定为到某个放上上,所以定位到确定的点,还需要方位信息;
切入点表达式用于指定哪些对象和方法调用方面功能.
execution(修饰符? 返回类型 方法名(参数) throws 异常类型? )
目标对象(Target):就是那些即将切入切面的对象,也就是那些被通知的对象。这些对象中已经只剩下干干净净的核心业务逻辑代码了,所有的共有功能代码等待AOP容器的切入。
代理对象(Proxy):将通知应用到目标对象之后被动态创建的对象。可以简单地理解为,代理对象的功能等于目标对象的核心业务逻辑功能加上共有功能。代理对象对于使用者而言是透明的,是程序运行过程中的产物。
织入(Weaving):将切面应用到目标对象从而创建一个新的代理对象的过程。这个过程可以发生在编译期、类装载期及运行期,当然不同的发生点有着不同的前提条件。譬如发生在编译期的话,就要求有一个支持这种AOP实现的特殊编译器;
发生在类装载期,就要求有一个支持AOP实现的特殊类装载器;只有发生在运行期,则可直接通过Java语言的反射机制与动态代理机制来动态实现。
2、面向切面编程:就是在原直线编程的某处咔嚓一下,加点动西,而且不影响原来的代码。可以用在日志,加权限,事物,异常管理等方面;
AOP面向切面编程:意思是将非核心业务功能与核心业务功能分开,通过配置文件再将其整合在一起
3、定义切面切入规则:
参数模式稍微有点复杂:() 匹配了一个不接受任何参数的方法, 而 (..) 匹配了一个接受任意数量参数的方法(零或者更多)。
模式 (*) 匹配了一个接受一个任何类型的参数的方法。 模式 (*,String) 匹配了一个接受两个参数的方法,第一个可以是任意类型,第二个则必须是String类型。
//********************************************************************************************************************************
4、按照软件重构的思想,如果多个类中出现了相同的代码,应该考虑定义一个共同的抽象类,相同类提取出来放到这个类中
这种思想有时候还是不能满足现实条件:
/*************************************纵向继承体系 PK 横向抽取机制*******************************************/