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>

相关文章
相关标签/搜索