该篇博客主要阐述基于XML实现AOP切面
一、Spring的AOP配置元素
二、Demo
Arithmetic.java(核心业务)
package com.linjie.aop;
/**
* @author LinJie E-mail:ash-ali@163.com
* @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:ash-ali@163.com
* @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:ash-ali@163.com
* @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》