zoukankan      html  css  js  c++  java
  • Spring Framework--AOP(1)--

    一、简介

    AOP(Aspect-Oriented Programming,即面向切面程序设计),提供了另外一种有关程序结构的思维方式,是OOP(面向对象程序设计)的补充。

    OOP的模块化单元是类,AOP的模块化单元是切面。切面可以模块化横切多个类或者对象的关注点,比如事务管理,这些关注点在AOP的词汇里,我们称之为横切关注点(crosscutting concerns).

    Spring的AOP框架是Spring最重要的组件之一,虽然Spring的Ioc不依赖于AOP(这意味着你如果不需要AOP你可以不用它),但是AOP是Ioc的补充,它们一起可以提供强大的中间件解决方案。

    Spring框架使用AOP可以:

    (1)提供声明式的企业服务,作为EJB声明式企业服务的替代方案。其中最重要的一个服务就是声明式事务管理。

    (2)作为OOP的重要补充,允许用户实现自定义的切面。

    1、AOP相关概念

    首先来认识AOP中的一些核心概念和术语,这些术语并不是特定于Spring框架的。AOP的这些术语不是很直观,比较不好理解。

    (1)Aspect(切面):对横切多个类的关注点的模块化,事务管理是个很好的例子。在Spring AOP中,切面是通过常规的类(基于schema的方式)或者带有@Aspect注解的常规类(@AspectJ方式)来实现的。

    (2)Join point(连接点):程序执行中的一个点,比如一个方法的执行或者一个异常的处理。在Spring AOP中,一个Join point总是代表一个方法的执行。

    (3)Advice(通知或者建议):一个切面在一个连接点执行的动作。许多AOP框架,包括Spring的,都是把建议模拟成拦截器,在Join point周围维护了一个拦截器链。

    (4)Pointcut(切入点):A Predicate that matches join points,匹配连接点的谓词。Advice关联一个pointcut表达式,并且在匹配这个表达式的连接点执行。Spring默认使用AspectJ的切入点表达式。

    (5)Introduction(引进):在一个类型上声明额外的方法或者属性,Spring AOP允许你在任何目标对象上引进新的接口(以及一个相应的实现)。比如你可以使用introduction来让一个bean实现一个IsModified接口来简化缓存。(introduction在AspectJ社区被称为一个类型间声明inter-type declaration)。

    (6)Target object(也叫advised object):目标对象,也就被建议对象,是被切面添加advice的对象。因为Spring AOP是使用运行时代理实现的,所以这个对象总是被代理的对象。

    (7)AOP Proxy(AOP代理):AOP框架生成的一个对象,用来实现切面的约定(建议方法的执行等等)。在Spring中,一个AOP Proxy总是一个JDK动态代理或者一个CGLIB代理。

    (8)Weaving(织入):把切面与其他应用类型或者对象链接起来生成一个新的advised object。织入可以在编译时(比如使用AspectJ编译器),加载时,运行时完成。Spring AOP和其他纯java的AOP框架一样,是在运行时完成织入的。

    Types of advice:before,after returning,after throwing,after,around。

  • 相关阅读:
    Architecture and working of an Antivirus Engine
    ASP.NET HttpApplication HttpModule + Page Life Cycle Events Sequence Test
    EasyCodeTimerPlus PerformanceCounter 改自 @老赵
    CodeTimerPerformance EasyPerformanceCountersHelper .NET v3.5
    HTML Input Text cursor position control
    DataTable List<T> 互转 扩展方法 Extension Methods
    删除N天前的M(天)个目录 、删除N天前最后修改的文件 ForFiles, dos command 批处理命令cmd/bat
    DataTableHelper
    DynamicMethodHelper R2 20120814 DynamicMethod ILGenerator.Emit
    DynamicCallMethodExpressionTreeInvokerHelper CodeDom 动态编译代码 执行代码
  • 原文地址:https://www.cnblogs.com/winson/p/3699529.html
Copyright © 2011-2022 走看看