先说一下AOSD的起源吧
传统的软件工程有一个不变的主题:对关注点的分解和局部化。将系统分解成为主要的功能模块,识别出关注点的其他问题,确保所有关注点的问题都能在代码的适当位置得到解决。但是关注点的分散和混杂又给代码编写和后期维护带来了很大的难度。
因此,必须有一种方法可以把关注点集中在一起,让系统开发者可以使用关注点自身的模块来描述每个关注点的行为。
AOSD,用以寻找软件系统中新的模块化特性,允许对系统中多个关注点进行独立描述,同时又能自动统一到系统中。
然后是一些常用的术语(from AOSD wiki):
concern(关注点):A concern is an area of interest or focus in a system. Concerns are the primary criteria for decomposing software into smaller, more manageable and comprehensible parts that have meaning to a software engineer.
crosscutting(横切):Note that crosscutting is a relationship between representations of concerns. Note also that it is a symmetric relationship. Therefore, if:
1. A is a representation of one a concern,
2. B is a representation of another concern, and
3. A crosscuts B,
then B also crosscuts A.
This means that the term "crosscutting concerns" is often misused in two ways: To talk about a single concern, and to talk about concerns rather than representations of concerns. Consider "synchronization is a crosscutting concern": we don't know that synchronization is crosscutting unless we know what it crosscuts. And there may be representations of the concerns involved that are not crosscutting.
aspect(方面):Aspects are one kind of concern in software development.
joint point(联接点):Join points are those elements of the programming language semantics which the aspects coordinate with. Nowadays, there are various join point models around and still new under development. They heavily depend on the underlying programming language and AO language.
In a number of presently available AOP languages, a join point is a region in the dynamic control flow of an application. Thus a join point can for instance represent
* a call to a method,
* execution of a method,
* the event of setting a field,
* the event of handling an exception ...
Join points can be picked up by an AOP program by using pointcuts to match on them. Depending on the pointcut language the AOP language provides, it may be possible to pick up more or less of those join points. Since join points are dynamic, it may be possible to expose runtime information such as the caller or callee of a method from a join point to a matching pointcut.
advice:In a number of AOP languages, advice consists of a pointcut and a body. The body executes at join points the pointcut matches. This pointcut may expose runtime information to the advice body.
pointcut:
(from Without EJB):A set of join points,defined to specify when an advice should fire.Pointcuts are often described using either regular expressions or another wildcard syntax.
(from Wiki)In a number of AOP languages, a pointcut is a predicate over dynamic join points, meaning that given a certain dynamic join point, a pointcut can either match this join point or not (at runtime). Another view of pointcuts is often, that they represent sets of join points. A pointcut may expose runtime information to a piece of advice.
Weaving:The process of coordinating aspects and non-aspects. Weaving can be done explicitly or implicitly, and can be done at a variety of times ranging from by-hand weaving when code is written, through compile-time, post-compile time and load time, up to runtime.
Without EJB中有个例子很好的解释了一下上面的术语:
public class MyBusinessObject implements BusinessObject{
public void businessMethod1() throws UnauthorizedException{
doSecurityCheck();
}
public void businessMethod2() throws UnauthorizedException{
doSecurityCheck();
}
public void requiresNoSecurityCheck() {
}
public void doSecurityCheck() throws UnauthorizedException{
}
}
这里,安全检查就是一个aspect,需要进行安全检查的这几个方法就是join point。而由于不是所有的方法都需要进行安全检查,所以就需要用pointcut来进行匹配。
下面使用了一个interceptor来将关注点模块化:
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
public class SecurityInterceptor implements MethodInterceptor{
public Object invoke(MethodInvocation invocation)throws Throwable{
doSecurityCheck();
return invocation.proceed();
}
public void doSecurityCheck{}
}
这里的interceptor就是advice
分享到:
相关推荐
#### 二、AOP基本概念 AOP是一种编程范式,其目的是提高模块化程度,特别是将那些对很多类都具有影响的公共行为封装起来,以便减少系统的耦合度,并且增加可重用性。Spring AOP是在Spring框架的基础上实现的一种面向...
本教程介绍 AOP 及其基本概念。AOP 及其相关的工具使您可以将基本横切关注点(如日志记录和安全)的代码,与程序的核心应用逻辑相分离。AOP 通过使代码更具有可读性、更不容易出错以及更容易设计和维护,改善了代码...
首先,我们需要了解 AOP 的基本概念,包括关注点、核心关注点、横切关注点、方面、连接点、切入点、增强、引介、混入继承和织入等。然后,我们将介绍 Spring AOP 框架所涉及到的核心组件列表,包括 Advisor、Advice...
1. aop.doc - 这可能是关于AOP的一份文档,可能包含了AOP的基本概念、核心概念(如切面、通知、连接点等)、实现机制和优势。 2. Aspect-Oriented Programming in Java.mht - 这个文件名表明它是一个关于Java语言中...
首先,我们需要了解AOP的基本概念。AOP的核心是切面(Aspect),它封装了跨越多个对象的行为或关注点,如日志记录。切点(Pointcut)定义了在何处应用切面,通常通过方法签名或注解来指定。通知(Advice)是切面实际...
本项目实现了Spring AOP的基本概念和操作,以下是对相关知识点的详细说明: 一、AOP核心概念 1. 切面(Aspect):切面是关注点的模块化,它封装了横切关注点,如日志、事务管理等。 2. 连接点(Join Point):程序...
1. AOP基本概念的介绍,包括上述核心概念的详细解释。 2. Spring AOP的配置方式,包括XML配置和基于注解的配置。 3. 如何定义切入点表达式,例如使用`execution()`、`within()`、`args()`等函数来匹配连接点。 4. ...
#### 二、AOP 的基本概念 1. **切面(Aspect)** - **定义**:切面是由通知(Advice)和切点(Pointcut)组成的集合,它们共同定义了切面的功能和执行时机。 - **工作内容**:主要包括定位到连接点(Joinpoint)...
`SpringAop.ppt`文件很可能包含了一个详细的讲解,涵盖了Spring AOP的基本概念、配置方式、使用注解声明切面、基于XML的配置以及如何自定义切面。PPT通常会通过图表、代码示例和流程图来帮助理解复杂的概念,使得...
在理解该电子书涉及的知识点之前,我们需要先了解Spring AOP的基本概念和组件。 首先,Spring AOP的核心概念包括: 1. 通知(Advice):这是AOP术语中最核心的概念。通知定义了切面应用到目标对象时所要执行的行为...
首先,我们要理解AOP的核心概念。AOP是一种编程范式,它允许开发者定义“切面”(Aspects),这些切面封装了特定的关注点,如日志、性能监控等。在运行时,这些关注点被编织到应用程序的主业务逻辑中,使得代码更...
1. AOP的基本概念: - 切面(Aspect):AOP的核心单元,包含了横切关注点的定义,可以理解为一个模块化的功能集合。 - 连接点(Join Point):程序执行过程中能够插入切面的特定点,通常是一个方法调用。 - 切入...
一、AOP的基本概念 AOP的核心是切面(Aspect),它封装了横切关注点,如日志记录、事务管理等。在Spring AOP中,切面由通知(Advice)、连接点(Join Point)、切点(Pointcut)、引入(Introduction)和织入...
首先,了解AOP的基本概念是非常必要的。AOP是一种编程范式,它允许我们把关注点(如日志、安全性等)从业务逻辑中分离出来,形成独立的模块,这些模块被称为切面。在Spring AOP中,切面通常由一个或多个通知...
### 二、Spring AOP的基本概念 1. **切面(Aspect)**:切面是封装了横切关注点的模块,它包含通知(advice)和切入点(pointcut)。 2. **通知(Advice)**:在特定的连接点(Join Point)执行的代码,如方法调用...
1. aopalliance.jar:这是一个小型库,定义了面向切面编程的基本接口。它被许多AOP框架使用,包括Spring,使得不同的AOP实现可以互相协作。它包含如`org.aopalliance.intercept.MethodInterceptor`和`org.aop...
通过这个例子,我们可以学习到Spring AOP的基本概念和用法,以及如何在实际开发中利用它来增强代码的灵活性和可维护性。同时,了解动态代理机制有助于我们理解Spring AOP的工作原理。在实际项目中,Spring AOP不仅...
这个简单例子将帮助我们理解AOP的基本概念和如何在Spring框架中实现它。 首先,我们要知道AOP的核心概念:切面、通知、连接点、切点、目标对象和代理。切面是包含横切关注点(如日志记录、事务管理等)的模块化组件...
Spring AOP,全称Aspect-Oriented Programming,是...无论是新手还是经验丰富的开发者,都可以从中学习到Spring AOP的基本概念和实践技巧。通过实际操作和分析`testaop`中的代码,你将更好地掌握面向切面编程的精髓。
首先,我们需要了解AOP的基本概念。AOP的核心思想是将那些影响多个类的公共行为(如日志记录)抽取出来,形成独立的模块,称为切面(Aspect)。切面可以包含通知(Advice),即在特定连接点(Join Point)执行的代码...