zoukankan      html  css  js  c++  java
  • spring aop

    我所理解的aop就是,当调用一个方法时,调用前需要调用另一个类的公共方法,调用后又需要调用另一个方法,调用前和调用后的这两个方法在

    其他有些方法调用时也需要调用,所以这两个方法就可以作为切面,切入那些需要调用它们的方法前和后,那些被切面切入的方法完全不知道这个

    切面,就像系统中的事务管理,日志管理,安全管理等,在大部分方法被调用时都需要调用的公共方法。例如:

    这是一个没有aop的类。这个A 类还需要管理注入的B对象,B本不该由A来负责管理的,毕竟

    如果还有D类也需要B类的方法,那样岂不是D类也需要管理注入的B对象,

    public class A{

      private B b;

      private C c;

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

        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>

  • 相关阅读:
    linux下小知识点积累
    马斯洛需求层次理论
    tar命令的小经验
    shell 和c语言的区别
    使用vue实现的品牌列表简单小例子
    vue的基本代码以及常见指令
    MVC和MVVM
    CSS3幽灵
    Web版App,原生App,混合App的区别以及优缺点
    常见的sql操作
  • 原文地址:https://www.cnblogs.com/SHANKS-log/p/5160799.html
Copyright © 2011-2022 走看看