概述
传统的面向切面编程,是通过动态代理的模式,底层使用反射。但是这种方式,代码写死了,想要更改功能,就得更改源码。而Spring给我们提供了非常好的解决方案,通过配置XML文件,实现切面功能的可插拔,也就是说,我们不用管代码,只需要更改配置文件就能实现功能的扩展。别的不多说,直接进入主题。
增强类
package com.gwx.aspect;
/**
* 作者:Alvin
* 日期:2017年2月28日
* 时间:上午11:10:55
*/
public class MyAspectBean {
public void save() {
System.out.println("save...");
}
public void update() {
System.out.println("update...");
}
public void delete() {
System.out.println("delete...");
}
public void query() {
System.out.println("query...");
}
}
配置文件
<?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"
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.xsd">
<bean id="bean" class="com.gwx.bean.Bean"></bean>
<!-- 配置增强类 -->
<bean id="myAspect" class="com.gwx.aspect.MyAspectBean"></bean>
<!-- AOP配置 -->
<aop:config>
<aop:pointcut expression="execution(* com.gwx.bean.Bean.test(..))" id="myPointCut"/>
<aop:aspect ref="myAspect">
<aop:before method="save" pointcut-ref="myPointCut"/>
<aop:after-returning method="delete" pointcut-ref="myPointCut"/>
</aop:aspect>
</aop:config>
</beans>
baen类
package com.gwx.bean;
/**
* 作者:Alvin
* 日期:2017年2月28日
* 时间:上午11:15:45
*/
public class Bean {
public void test() {
System.out.println("testing...");
}
}
测试类
package com.gwx.test;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.gwx.bean.Bean;
/**
* 作者:Alvin
* 日期:2017年2月28日
* 时间:上午11:20:45
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext1.xml")
public class TestAspect {
@Autowired
private Bean bean;
@Test
public void test1() {
bean.test();
}
}