Spring AOP的一个具体例子

新建一个Logging类:

我希望我的业务类的Java代码的方法,在执行前,执行后,返回方法后,以及抛出异常后,能够执行一些hook代码。这些hook代码就写在这个Logging类的对应方法里:

  • beforeAdvice
  • afterAdvice
  • afterReturningAdvice
  • AfterThrowingAdvice

Spring AOP的一个具体例子

业务代码就是Student Bean:在这个MainApp.java里,调用了Student Bean的两个方法:getName和getAge. 我期望Logging类里定义的四个方法,可以被AOP织入。

Spring AOP的一个具体例子

Beans.xml的内容要点:
(1) 定义aop的命名空间:

Spring AOP的一个具体例子

(2) 定义一个aspect,ref属性指向logging Bean:

Spring AOP的一个具体例子

pointcut:连接点,指定哪些切入点应该被执行。ID为selectAll,结合expression表达式属性,说明期望logging的逻辑被织入所有advice并执行。

(3) 在com.sap.*下的所有bean的方法执行之前,执行logging bean的beforeAdvice方法。以此类推,在com.sap.*下的所有bean的方法执行之后但尚未返回时,执行logging bean的afterAdvice方法。

Spring AOP的一个具体例子

从调用栈观察到,Cglib也参与了pointcut的动态织入过程。

Spring AOP的一个具体例子

要获取更多Jerry的原创文章,请关注公众号"汪子熙":
Spring AOP的一个具体例子