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