50--AOP
AOP被称为切面程序,在对于AOP的描述中,大多喜欢用横向编码来形容,其实横向切入系统只是为提取模块中重要的操作部分。在Spring的框架中我所理解的切面其实就相当于是一个Servlet Filter。当然Servlet Filter只是其一种表现的方式。AOP如同一个拦截器,这个功能可以记录处理的整个过程,像日志安全事务处理等,这种方法看上去很似优雅,可以在无意间将你模块与模块需要交互的逻辑进行了模块化抽象化的处理。这便是AOP最为强大和独到之处。
当然要真正理解AOP还是要熟悉它自身的定义,理解了几个关键点AOP就会真正的融会贯通了。
术语定义
Concern:表示你需要进行AOP编码关注的内容,这里面有可能是事务管理,日志,安全和性能等。
Crosscutting Concern:表示会在特定的环境下实现会在其中横切各个类。这与OOP的实现和维护截然不同。
Join Piint:称为连接点,通常是指程序或类执行过程中的一个点,通常是指方法的调用。包括了执行该方法的过程。
Advice:通知可以理解为在一些连接点处运行的代码,具体类型分为around,before,throws,after returning四种类型。就是通知的处理类型。around类型是比较强大,要实现它必须实现MethodInterceptor的接口。由此可以推出:使用before类型就必须实现MethodBeforeAdvice接口,throws类型必须实现ThrowsAdvice接口,使用returning类型必须实现AfterReturningAdvice接口。
Pointcut:被称之为切入点,就是触发advice类型的代码。切入点一般使用了正则表达式或是通配符。它是AOP的一个重要部分。有了它们你就可以决定何时何地调用拦截器。在某些时候,和声明式的验证很类似,但不是指定要验证的某个字段,而是指定一个要拦截的方法。在表中,pointcuts就是定义切入的方法在何时该触发某个拦截器。实现pointcuts最简单的方法是使用正则表达式,可以在Spring框架里的支持正则表达式的包来实现。
Weaving:在Aop中非常重要的一个环节,主要是负责装配切面,创建被切入的对象。实现它需要很多技巧,用行话说教策略。Weaving是将切面应用到目标(target object)的过程。主要策略有好几种:JDK动态代理和字节码处理也是最为流行的。
Interceptor:顾名思义就是拦截器,是实现方法。针对某个特定的连接点做相应的拦截工作。
Target Object(目标对象):包含join point的对象。在使用拦截框架中,它是处于拦截器链末尾的一个对象实例。
最后谈谈我对于Aop的感概,对于程序来说说最大的用途就是觉得使用Aop在事务处理时候能够减少了冗余代码。Aop的出现可以让其在同一位置和配置中处理。对于系统架构师而言,它在Web应用资源池,线程池,样式表缓存
,认证和授权等方面有很大的用武之地。