AOP:面向切面编码:
1、AOP学习目标:
使所需要的功能能够加在任何类中,而不需要调用。
①借助于Spring编写一个自己的切面,加到任何一个Java中;
②Spring本身也提供了编写好的切面功能。
切面有最大程度的复用性,耦合度趋于零。在事务方面,AOP用得较成功。
2、代理的两种方式:
 静态代理:
 针对每个具体类分别编写代理类;
 针对一个接口编写一个代理类;
 动态代理:
 针对一个方面编写一个InvocationHandler,然后借用JDK反射包中的Proxy类为各种接口动态生成相应的代理类
AOP的主要原理:动态代理       研究一下动态代理的写法。
3、AOP中思想和名词术语:
 Aspect:方面,层面
 Joinpoint:结合点、联结点;加入业务流程的点或时机
 Pointcut:切入点、作用点;指定某个方面在哪些联结点织入到应用程序中
 Advice:通知、行为;某个方面的具体实现,代表了一个动作. 
 Advisor:由Pointcut和Advice共同构成
 Pointcut:Spring根据类名称及方法名称定义Pointcut,表示Advice织入至应用程序的时机;  org.springframework.aop.Pointcut
 ProxyFactoryBean:用来创建代理对象
创建代理对象需指定的三要素:
①target:设定目标对象(只能是一个);
②proxyInterfaces:设定代理接口(目标对象所实现的接口);
③interceptorNames:设定拦截器的名字(各个advice或advisor bean的列表)
Advice:五种(根据织入的时机不同而划分)
Before Advice:在目标对象的方法执行之前加入行为;
要实现的接口:org.springframework.aop.MethodBeforeAdvice
After Advice:在目标对象的方法执行之后加入行为;
要实现的接口:org.springframework.aop.AfterReturningAdvice
Throw Advice:在目标对象的方法发生异常时加入行为;
要实现的接口:org.springframework.aop.ThrowsAdvice
Around Advice:在目标对象的方法执行前后加入行为;
要实现的接口:org.aopalliance.intercept.MethodInterceptor
Introduction Advice:引入的行为(增加了可操作的方法)。
声明要添加的功能接口;
创建引入Advice;
(继承org.springframework.aop.support.DelegatingIntroductionInterceptor,并实现添加的功能接口)
在配置文件中定义一个DefaultIntroductionAdvisor的bean。
(需要两个构造方法的参数:Advice和添加的功能接口)
PointcutAdvisor:Pointcut定义了Advice的应用时机;在Spring中,使用PointcutAdvisor将Pointcut和Advice结合为一个对象。
NameMatchMethodPointcutAdvisor:可用来指定Advice所要应用的目标对象上的方法名称
RegexpMethodPointcutAdvisor:可使用Regular expression定义Pointcut,在符合Regular expression的情况下应用Advice,其pattern属性用来指定所要符合的完整类名(包括 package名称)及方法名;
AutoProxy:自动代理
BeanNameAutoProxyCreator:根据bean的名字为其自动创建代理对象,bean工厂自动返回其代理对象: