spring aop

我所理解的aop就是,當調用一個方法時,調用前須要調用另外一個類的公共方法,調用後又須要調用另外一個方法,調用前和調用後的這兩個方法在express

其餘有些方法調用時也須要調用,因此這兩個方法就能夠做爲切面,切入那些須要調用它們的方法前和後,那些被切面切入的方法徹底不知道這個安全

切面,就像系統中的事務管理,日誌管理,安全管理等,在大部分方法被調用時都須要調用的公共方法。例如:this

這是一個沒有aop的類。這個A 類還須要管理注入的B對象,B本不應由A來負責管理的,畢竟日誌

若是還有D類也須要B類的方法,那樣豈不是D類也須要管理注入的B對象,xml

public class A{對象

  private B b;事務

  private C c;io

  public A(C c,B b) {  //注入C對象,B對象class

    this.c = c;配置

    this.b = b;

  }

  public void a() {

    b.b();  //c方法執行前執行

    c.c();

    b.b2();  //c方法執行後執行

  }

}

public class C{

  public void c() {

    system.out.println("我是c方法");

  }

}

public class B{

  public void b() {

    system.out.println("我是c方法執行前執行的b方法");

  }

 

  public void b2() {

    system.out.println("我是c方法執行後執行的b2方法");

  }

}

這是一個修改成切面的類,這樣A類徹底不知道本身被切面B切入了,也不須要管理B對象,只須要執行本身的業務邏輯就好

public class A{

  private C c;

  public A(C c) {  //注入C對象

    this.c = c;

  }

  public void a() {

    c.c();

  }

}

 

public class B{

  public void b() {

    system.out.println("我是a方法執行前執行的b方法");

  }

 

  public void b2() {

    system.out.println("我是a方法執行後執行的b2方法");

  }

}

在A.xml裏配置一下

<bean id="b" class="這裏是B類的完整路徑"/>     //首先須要將B類聲明爲一個Bean

<aop:config>

  <aop:aspect ref="b">

    <aop:pointcut id="c"

      expression="execution(* *.a(..))" />  //c:被切入的那個方法。定義切面

    <aop:before pointcut-ref="c"

          method="b" />         //c方法執行前執行的b方法

    <aop:after pointcut-ref="c"

          method="b2" />        //c方法執行後執行的b2方法

  </aop aspect>

</aop:config>

相關文章
相關標籤/搜索