歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 使用Spring進行切面(AOP)編程

使用Spring進行切面(AOP)編程

日期:2017/3/1 10:40:18   编辑:Linux編程

一、 AOP理論

AOP為Aspect Oriented Programming的縮寫,意為:面向切面編程(也叫面向方面),可以通過預編譯方式和運行期動態代理實現在不修改源代碼的情況下給程序動態統一添加功能的一種技術。利用AOP可以對業務邏輯的各個部分進行隔離,從而使得業務邏輯各部分之間的耦合度降低,提高程序的可重用性,同時提高了開發的效率。

u 橫切性關注點

對哪些方法進行攔截,攔截該方法後怎麼處理,這些關注就稱之為橫切面關注點。

u Aspect(切面)

指橫切性的關注點的抽象即為切面,它與類相似,只是兩者的關注點不一樣,類是對物體特征的抽象,而切面是對橫切性關注點的抽象。

u Joinpoint(連接點)

所謂連接點就是那些被攔截的點(也就是需要被攔截的類的方法)。在Spring中,這些點指的只能是方法,因為Spring只支持方法類型的攔截,實際上Joinpoint還可以攔截field或類構造器。

u Pointcut(切入點)

所謂切入點是指那些我們對Jointpoint(連接點)進行攔截的定義,也就是在切面中定義的方法,並聲明該方法攔截了Jointpoint(連接點)。

u Advice(通知)

所謂通知就是指切入點攔截到Jointpoint(連接點)之後要做的事情。通知分為前置通知(@Before)、後置通知(@AfterReturning)、異常通知(@AfterThrowing)、最終通知(@After)和環繞通知(@Around)。

u Target(目標對象)

代理的目標對象。

u Weave(織入)

指將aspects應用到target對象並導致proxy對象創建的過程稱為織入。

u Introduction(引入)

在不修改類代碼的前提下,introduction可以在運行期為類動態的添加一些方法或Field(字段)。

二、 AOP編程的方式

要使用AOP進行編程,我們需要在Spring的配置文件(比如名為applicationContext.xml)中先引入AOP的命名空間,配置文件的引入內容如下面紅色字體:

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:context="http://www.springframework.org/schema/context"

xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd

http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd

http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd ">

Spring的提供了兩種AOP編程方式,我們可以選擇其中的任何一種來進行AOP編程。

1. 基於注解方式的AOP編程

2. 基於XML配置方式的AOP編程

三、 實例演示AOP編程

這裡通過演示AspectBean切面來攔截StudentMgr的update方法(連接點)來描述切面編程具體是如何工作的。先以注解的方式來說明,後面會給出相應的xml配置信息。

1. 搭建AOP編程環境

AOP環境的搭建參考文章 利用Maven搭建Spring開發環境 見 http://www.linuxidc.com/Linux/2012-01/51272.htm。

2. 開啟注解方式

在Spring的配置文件中增加下面的一個bean以開啟Spring的注解編程

<bean class="org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator" />

3. 定義IstudentMgr接口及bean類StudentMgr,代碼如下

IstudentMgr接口Java代碼:

[java]
  1. package com.trs.components.mgr;
  2. public interface IStudentMgr {
  3. public void save(String _sStudentName) throws Exception;
  4. public void update(String _sStudentName) throws Exception;
  5. }


StudentMgr的bean類java代碼:

[java]
  1. package com.trs.components.mgr;
  2. public class StudentMgr implements IStudentMgr {
  3. public void save(String _sStudentName) throws Exception {
  4. System.out.println("保存了學生對象..");
  5. }
  6. public void update(String _sStudentName)throws Exception{
  7. System.out.println("更新了學生對象..");
  8. }
  9. }
Copyright © Linux教程網 All Rights Reserved