Spring AOP三种实现方式

2017-02-17 14:01

Aop又叫面向切面编程,其中“通知”是切面的具体实现,分为before(前置通知)、after(后置通知)、around(环绕通知)
三个注解的区别:@Before是在所拦截方法执行之前执行一段逻辑。@After 是在所拦截方法执行之后执行一段逻辑。@Around是可以同时在所拦截方法的前后执行一段逻辑。

实现方式一(在XML文档中声明)

    <aop:config>
        <!-- 切入的内容 -->
        <aop:aspect ref="MyLog">
            <!-- 切入的位置,切入点 -->
            <aop:pointcut id="point1" expression="execution(* SpringAOPTest.MyBean.*(..)) "/> 
            <aop:after method="logEnd" pointcut-ref="point1"/>
            <aop:before method="logHead" pointcut-ref="point1"/>       
        </aop:aspect>
    </aop:config>

实现方式二(注解方式)
注意:需要在XML文档中加入,这样系统就会自动寻找进行@Aspect
public class AOPLog {
@Before(“execution(* SpringAOPTest.MyBean.*(..))”)
public void logHead(){
System.out.println(“….AOPLog I’m head….”);
}
@After(“execution(* SpringAOPTest.MyBean.*(..))”)
public void logEnd(){
System.out.println(“….AOPLog I’m End….”);
}
}

@Aspect
public class AOPLog {
    @Pointcut("execution(* SpringAOPTest.MyBean.*(..))")
    private void show(){}
    @Before("show()")
    public void logHead(){
        System.out.println("....AOPLog I'm head....");
    }
    @After("show()")
    public void logEnd(){
        System.out.println("....AOPLog I'm End....");
    }
}

通过实现的方式三

public class ImplementsLog implements MethodBeforeAdvice{
    @Override
    public void before(Method method, Object[] os, Object o) throws Throwable {
        System.out.println("hello implements MethodBeforeAdvice ");        
    }
}
<bean id="ImLog" class="SpringAOPTest.ImplementsLog"/>

    <aop:config>
      <aop:pointcut id="point1" expression="execution(* SpringAOPTest.MyBean.*(..)) "/> 
      <aop:advisor advice-ref="ImLog" pointcut-ref="point1"/>  
    </aop:config>