前面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();
- }
- }
测试结果: