spring aop

一、基本概念
  • AOP(aspect oriented programming):面向切面编程
  • 面向切面编程:在原有纵向执行流程中,针对某一个或某一些方法添加通知,形成横切面的过程就叫面向切面编程。
  • 优点:高扩展性,可以释放原有功能部分逻辑,让职责更明确。
  • 常用概念:
    • 原有功能:切点,pointcut
    • 前置通知:在切点之前执行的功能,before advice
    • 后置通知:在切点之后执行的功能,after advice
    • 异常通知:如果切点执行过程中出现异常,会出发异常通知,throws advice
    • 切面:所有功能统称切面
    • 织入:把切面嵌入到原有功能的过程
  • spring提供2种AOP实现方式
    • Schema-based
      • 每个通知需要实现接口或类
      • 在<aop:advisor>中配置
    • AspectJ
      • 每个通知不需要实现接口或类
      • 在<aop:aspect>中配置
 
二、Schema-based
  • applicationContext.xml:
       <bean id="demobefore" class="com.test.advice.Before"></bean>
       <bean id="demoafter" class="com.test.advice.After"></bean>
       <aop:config>
              <aop:pointcut expression="execution(* com.test.aop.Demo.demo2())"  id="demopoint"/>
              <aop:advisor advice-ref="demobefore" pointcut-ref="demopoint"/>
              <aop:advisor advice-ref="demoafter" pointcut-ref="demopoint"/>
       </aop:config>
       <bean id="demo" class="com.test.aop.Demo"></bean>
  • 前置通知类:
package com.test.advice;
 
import java.lang.reflect.Method;
import org.springframework.aop.MethodBeforeAdvice;
 
public class Before implements MethodBeforeAdvice{
    @Override
    public void before(Method method, Object[] args, Object target) throws Throwable {
        System.out.println("before demo2...");
    }
}
  • 后置通知类:
package com.test.advice;
 
import java.lang.reflect.Method;
import org.springframework.aop.AfterReturningAdvice;
 
public class After implements AfterReturningAdvice{
    @Override
    public void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable {
        System.out.println("after demo2...");
    }
}
 
posted @ 2019-05-12 14:14  woldcn  阅读(122)  评论(0编辑  收藏  举报