[前言]:Spring AOP是一个流行的框架,在日志记录,权限判断,事务管理方面都有自己独到的处理方式,本文就spring aop做简单的介绍,目的在于对SpringAop由一个基本的了解,本文的读者是Spring入门的学生。
一:SpringAOP相关术语的介绍
1.1 关注点(Concern)
关注点也就是我们要考察或解决的问题。比如在一个在一个电子商务系统中,订单的处
理,用户的验证、用户日志记录等都属于关注点(Core Concerns)。核心关注点,是只一个系 统中的核心功能,也就是一个系统中跟特定业务需求联系最紧密的商业逻辑。在一个电子商 务系统中,订单处理、客户管理、库存及物流管理都是属于系统中的核心关注点。除了核心 关注点以外,还有一种关注点,他们分散在每个各个模块中解决同一样的问题,这种跨越多 个模块的关注点称为横切关注点或交叉关注点(Crosscutting Concerns)。在一个电子商业系统 中,用户验证、日志管理、事务处理、数据缓存都属于交叉关注点。
在AOP 的编程方法中,主要在于对关注点的提起及抽象。我们可以把一个复杂的系统
看作是由多个关注点来有机组合来实现,一个典型的系统可能会包括几个方面的关注点,如
核心业务逻辑、性能、数据存储、日志、授权、安全、线程及错误检查等,另外还有开发过
程中的关注点,如易维护、易扩展等。
1.2 切面(Aspect)
切面是一个抽象的概念,从软件的角度来说是指在应用程序不同模块中的某一个领域方面。从程序抽象的角度来说,可以对照 OOP 中的类来理解。OOP 中的类(class)是实现世 界模板的一个抽象,其包括方法、属性、实现的接口、继承等。而AOP 中的切面(aspect)是 实现世界领域问题的抽象,他除了包括属性、方法以外,同时切面中还包括切入点Pointcut、 增强(advice)等,另外切面中还可以给一个现存的类添加属性、构造函数,指定一个类实现 某一个接口、继承某一个类等。
1.3 连接点(Join point)
连接点也就是运用程序执行过程中需要插入切面模块的某一点。连接点主要强调的
是一个具体的“点”概念。这个点可以是一个方法、一个属性、构造函数、类静态初始化块, 甚至一条语句。比如前面的例子中,连接点就是指具体的某一个方法。 在一般的AOP 框架中,一般采用签名的方式来描述一个连接点,有的AOP 框架只有很 少类型的连接点,如 Spring AOP 中当前只有方法调用。
1.4 切入点(Pointcuts)
切入点指一个或多个连接点,可以理解成一个点的集合。切入点的描述比较具体,而且
一般会跟连接点上下文环境结合。比如,在前面的例子中,切入点“execution(*
Component.*(..)”表示 “在Component类中所有以 business 打头的方法执行过程
中”,其包含了3个连接点(business1、business2、business3)的集合。另外,
“Component类中的所有方法调用”、“包com.easyjf.service里面所有类中所有方
法抛出错误”、“类 UserInfo 的所有getter或 seeter方法执行”,这些都可以作为
切入点。另外,在大多数 AOP 框架实现中,切入点还支持集合运算,可以把多个切入点通
过一定的组合,形成一个新的切入点。在AspectJ 中,可以使用||、&&、!等操作符来组
合得到一个符合特定要求的切入点。
1.5 增强或通知(Advice)
Advice 一词不管翻译成建议、通知或者增强,都不能直接反映其内容,因此本书主要
使用“增强”这一叫法。当然也可以把其仅看作是一个简单名词的来看待。增强(Advice)里 面定义了切面中的实际逻辑(即实现),比如日志的写入的实际代码,或是安全检查的实际 代码。换一种说法增强(Advice)是指在定义好的切入点处,所要执行的程序代码。比如,下 面的话都是用来描述增强(Advice)的例子:“当到达切入点seeter 时,检查该方法的参数是否 正确”、“在save 方法出现错误这个切入点,执行一段错误处理及记录的操作”。一般情况下, 增强(通知)主要有前增强、后增强、环绕增强三种基本类型。
前增强(before advice )-是指在连接点之前,先执行增强中的代码。
后增加(after advice)-是指在连接点执行后,再执行增强中的代码。后增强一般连接点正常返回增加及连接点异常返回增强等类型。
环绕增强(around advice)-是一种功能强大的增强,可以自由改变程序的流程,连接点 返回值等。在环绕增强中除了可以自由添加需要的横切功能以外,还需要负责主动调用连接 点(通过proceed)来执行激活连接点的程序。
1.6 引介(Introduction)
引介是指给一个现有类添加方法或字段属性,引介还可以在不改变现有类代码的情况
下,让现有的 Java 类实现新的接口,或者为其指定一个父类从而实现多重继承。相对于增 强(Advice)可以动态改变程序的功能或流程来说,引介(Introduction)则用来改变一个类的静 态结构。比如我们可以让一个现有为实现java.lang.Cloneable 接口,从而可以通过 clone()方 法复制这个类的实例。
1.7 织入(weaving)
织入是指把解决横切问题的切面模板,与系统中的其它核心模块通过一定策略或规则组
合到一起的过程。在java 领域,主要包括以下三种织入方式:
1、运行时织入-即在java 运行的过程中,使用Java 提供代理来实现织入。根据代理产 生方式的不同,运行时织入又可以进一步分为J2SE 动态代理及动态字节码生成两种方式。 由于J2SE 动态代理只能代理接口,因此,需要借助于一些动态字节码生成器来实现对类的 动态代理。大多数AOP 实现都是采用这种运行时织入的方式。
2、类加载器织入-指通过自定义的类加载器,在虚拟机JVM 加载字节码的时候进行织
入,比如AspectWerkz( 已并入AspecJ)及JBoss 就使用这种方式。
3、编译器织入-使用专门的编译器来编译包括切面模块在内的整个应用程序,在编译
的过程中实现织入,这种织入是功能最强大的。编译器织入的AOP 实现一般都是基于语言
扩展的方式,即通过对标准java 语言进行一些简单的扩展,加入一些专用于处理AOP 模块
的关键字,定义一套语言规范,通过这套语言规范来开发切面模块,使用自己的编译器来生
成java 字节码。AspectJ 主要就是是使用这种织入方式。
当然还有很多概念性的术语,在此不一一列举,在这里我用一个例子来说明Spring的作用,并通过基于注解方式和基于XML配置方式实现。
问题的提出:假设一个类UserDao有CRUD操作,现在要日志记录该类的CRUD方法调用情况,并同时判断调用者是否有权限调用CRUD操作。
package test.impl;
import org.springframework.stereotype.Service;
import test.PersonService;
@Service("personService")
public class PersonServiceBean implements PersonService{
public String getPersonName(Integer id) {
System.out.println("我是GETPERSONNAME()方法");
return "xxx";
}
public void save(String name) {
System.out.println("我是SAVE()方法");
}
public void update(String name, Integer id) {
System.out.println("我是UPDATE()方法");
}
}
提取接口
package test;
public interface PersonService {
public void save(String name);
public void update(String name,Integer id);
public String getPersonName(Integer id);
}
以后再写算了.....
分享到:
相关推荐
在这个入门实例中,我们将深入理解Spring AOP如何实现简单日志记录。 首先,AOP的核心概念包括切面(Aspect)、通知(Advice)、连接点(Join Point)、切入点(Pointcut)和织入(Weaving)。切面是AOP中的核心...
- **SpringAOP.avi**:可能是一个视频教程,详细讲解了Spring AOP的概念和实践。 - **SpringAOP.doc**:可能是文档教程,包含了详细的步骤和示例代码。 - **SpringAOP_src.rar**:源代码示例,供你参考和实践。 - **...
### Spring AOP 入门详解 #### 一、Spring AOP 概述 Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的一个关键特性,它为开发者提供了在运行时动态添加代码(即横切关注点或切面)到已有...
本教程将通过一个简单的Spring AOP入门案例,帮助初学者理解这一概念。 ### 一、AOP基础 1. **切面(Aspect)**:切面是关注点的模块化,它封装了跨越多个对象的行为或数据。在Spring AOP中,切面可以由一个类定义...
**Spring AOP 入门实例** 在Java编程中,面向切面编程(Aspect-Oriented Programming,简称AOP)是一种编程范式,它允许程序员定义“横切关注点”,如日志、事务管理、性能监控等,然后将这些关注点与核心业务逻辑...
以下是一个简单的Spring AOP入门实例步骤: 1. 首先,定义一个切面类,包含通知方法。例如,一个简单的日志切面: ```java @Aspect @Component public class LoggingAspect { @Before("execution(* com.example*...
**Spring AOP 入门及其实例讲解** 在软件开发中,面向切面编程(Aspect Oriented Programming,简称AOP)是一种编程范式,它旨在提高代码的可重用性,减少冗余,并将关注点分离。Spring框架是Java开发中的一个流行...
本入门案例将帮助你理解并掌握Spring AOP的基本概念和使用方法。 在Spring AOP中,我们首先需要了解的是"切面"(Aspect)的概念。切面是封装了横切关注点的代码模块,它可以包含通知(Advice)、切点(Pointcut)和...
### Spring AOP 入门详解 #### 一、Spring AOP 概述 Spring AOP (Aspect Oriented Programming) 是一种面向切面编程的技术,在Spring框架中得到了良好的支持。通过这种方式,开发者可以更加灵活地组织代码,使得...
Spring AOP,全称Aspect-Oriented Programming,是Spring框架的一部分,主要负责处理系统中的横切关注点,如日志、事务管理、性能监控等。它通过代理模式实现了这一功能,使得开发者能够在不修改原有业务代码的情况...
5. **Spring AOP入门**: Spring AOP通过XML配置或者注解方式来实现AOP功能。在XML配置中,可以定义Bean、Advisor、Pointcut等元素。在注解方式下,可以使用`@Aspect`、`@Before`、`@After`、`@AfterReturning`、`@...
Spring的AOP(面向切面编程)是一种编程范式,它允许程序员在不修改源代码的情况下,通过插入称为切面的代码片段来增强程序的功能。这个简单例子将帮助我们理解AOP的基本概念和如何在Spring框架中实现它。 首先,...
**Spring AOP 入门** 在深入探讨Spring AOP之前,我们先理解AOP(面向切面编程)的概念。AOP是一种编程范式,旨在减少代码的重复性,提高代码的可维护性和可读性。它通过将关注点(如日志记录、事务管理、安全性等...
以上就是一个简单的Spring AOP入门介绍。通过学习和实践,你可以更好地理解如何在实际项目中利用AOP来提高代码的可维护性和灵活性。在后续的学习中,你还可以探索更高级的特性,如自定义通知类型和使用AspectJ的编织...
在本文中,我们将通过一个简单的入门Demo来了解如何在Spring中使用AOP。首先,我们需要创建一个Maven项目,并添加相关的依赖。在`pom.xml`文件中,我们需要引入Spring的核心库、Spring的上下文库、Spring的AOP库以及...
**Spring AOP 简介** Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的一个重要模块,它扩展了传统的面向对象编程,允许开发者定义“横切关注点”(cross-cutting concerns),如日志、事务...
Spring Aop基于xml练习
视频教程中提到的"AOP快速入门"部分可能涵盖了以下内容: 1. AOP基本概念的介绍,包括切面、通知、连接点和代理等。 2. 如何定义和使用切点表达式来指定通知的执行时机。 3. 不同类型的通知(Before、After、After ...
Spring AOP(面向切面编程)是Spring框架的重要组成部分,它提供了一种模块化和声明式的方式来处理系统中的交叉关注点问题,如日志、事务管理等。在本主题中,我们将深入探讨Spring AOP的注解版,它是基于Java注解的...