Spring AOP基于XML配置的切面

该篇博客主要阐述基于XML实现AOP切面

一、Spring的AOP配置元素

这里写图片描述


二、Demo

Arithmetic.java(核心业务)

package com.linjie.aop;
/**
* @author LinJie E-mail:[email protected]
* @version 创建时间:2018年5月6日 下午7:53:56
* @核心业务:基本运算
*/
public class Arithmetic {

    //add
    public int add(int d,int e) {
        System.out.println("add method END!");
        System.out.println();
        return d+e;
    }

    //subtraction
    public int sub(int a,int b) {
        System.out.println("sub method END!");
        System.out.println();
        return a-b;
    }

    //multiplicative
    public int mul(int a,int b) {
        System.out.println("mul method END!");
        System.out.println();
        return a*b;
    }
    //division
    public int div(int a,int b) {
        System.out.println("div method END!");
        System.out.println();
        return a/b;
    }

}

LogginAspectJ.java (日志切面)

package com.linjie.aop;

/**
* @author LinJie E-mail:[email protected]
* @version 创建时间:2018年5月8日 下午2:53:31
* log功能,不影响核心业务
*/
public class LogginAspectJ {
     //前置通知,方法执行之前执行
    public void BeforeMethod() {    
        System.out.println("logginAspectJ before");
    }
}

SafetyAspectJ.java

package com.linjie.aop;
/**
* @author LinJie E-mail:[email protected]
* @version 创建时间:2018年5月9日 下午12:36:17
* 安全切面
*/
public class SafetyAspectJ {
    //前置通知,方法执行之前执行
      public void BeforeMethod() {    
          System.out.println("SafetyAspectJ before");
      }
}

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
    <!-- 配置bean -->
    <bean id="arithmetic"
        class="com.linjie.aop.Arithmetic"></bean>
    <!-- 配置切面的bean -->
    <bean id="logginaspectJ"
        class="com.linjie.aop.LogginAspectJ"></bean>    
    <bean id="safetyaspectJ"
        class="com.linjie.aop.SafetyAspectJ"></bean>

    <!-- 配置AOP -->
    <aop:config>
        <!-- 配置切面表达式 -->
        <aop:pointcut expression="execution(* com.linjie.aop.Arithmetic.*(..))"
         id="pointcut"/>
        <!-- 配置切面和通知 
             order:优先级,越小优先级越高-->
        <aop:aspect ref="logginaspectJ" order="2">
            <aop:before method="BeforeMethod" pointcut-ref="pointcut"/>
        </aop:aspect>
        <aop:aspect ref="safetyaspectJ" order="1">
            <aop:before method="BeforeMethod" pointcut-ref="pointcut"/>
        </aop:aspect>
    </aop:config>
</beans>

测试类

package com.linjie.aop;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * @author LinJie
 * 测试
 */
public class SpringTest {
    @Test
    public void test() {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        Arithmetic arithmetic = (Arithmetic) context.getBean("arithmetic");
        int result = arithmetic.add(1, 2);
    }
}

结果

这里写图片描述


三、通知如何编织到业务中(《Spring IN ACTION》)

这里写图片描述


参考

《Spring IN ACTION》

猜你喜欢

转载自blog.csdn.net/w_linux/article/details/80252840