前面AOP几节我们已经浅析了Spring 是如何实现AOP的,和AOP的底层原理,那么今天我们先来看看我们开发环境中是怎么运用AOP的
好了,我们先定义一个简单的应用场景,在web开发中,mvc模式中,我们的有些核心service的某些方法是需要打logger的,现在我们例如AOP,将打logger的事情给AOP去做
先定义个service接口
package org.study.spring.aop.base.xml;
public interface BussinessService {
void doSomething();
}
具体实现:
package org.study.spring.aop.base.xml;
public class BussinessServiceImpl implements BussinessService{
public void doSomething() {
System.out.println("BussinessServiceImpl do something");
}
}
通知(advice):
package org.study.spring.aop.base.xml;
import org.aspectj.lang.JoinPoint;
public class LoggerAspect {
public void doBefore(JoinPoint jp) {
System.out.println("log Begining method: " + jp.getTarget().getClass().getName() + "." + jp.getSignature().getName());
}
}
spring的配置文件
<?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:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<aop:config>
<!-- 用什么切 -->
<aop:aspect id="TestAspect" ref="aspectBean">
<!-- 在那个地方切 -->
<aop:pointcut id="busssinessPointcut" expression="execution(* org.study.spring.aop.base.xml.*.*(..))" />
<!-- 什么时候切 -->
<aop:before pointcut-ref="busssinessPointcut" method="doBefore"/>
</aop:aspect>
</aop:config>
<bean id="aspectBean" class="org.study.spring.aop.base.xml.LoggerAspect" />
<bean id="bussinessServiceImpl" class="org.study.spring.aop.base.xml.BussinessServiceImpl"></bean>
</beans>
测试代码
package org.study.spring.aop.base.xml;
import javax.annotation.Resource;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations ="classpath*:spring-aop.xml")
public class TestXmlAop {
@Resource
private BussinessService bussinessService;
@Test
public void testAop() throws Exception{
bussinessService.doSomething();
}
}
测试结果: