浅析Spring AOP源码(十七) Spring AOP开发大作战

前面AOP几节我们已经浅析了spring 是如何实现AOP的,和AOP的底层原理,那么今天我们先来看看我们开发环境中是怎么运用AOP的


好了,我们先定义一个简单的应用场景,在web开发中,mvc模式中,我们的有些核心service的某些方法是需要打logger的,现在我们例如AOP,将打logger的事情给AOP去做


先定义个service接口

[java]  view plain  copy
  1. package org.study.spring.aop.base.xml;  
  2.   
  3. public interface BussinessService {  
  4.       
  5.     void doSomething();  
  6.   
  7. }  

具体实现:

[java]  view plain  copy
  1. package org.study.spring.aop.base.xml;  
  2.   
  3. public class BussinessServiceImpl implements BussinessService{  
  4.   
  5.     public void doSomething() {  
  6.         System.out.println("BussinessServiceImpl do something");  
  7.     }  
  8.   
  9. }  

通知(advice):

[java]  view plain  copy
  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.         System.out.println("log Begining method: " + jp.getTarget().getClass().getName() + "." + jp.getSignature().getName());    
  10.     }   
  11.   
  12. }  

spring的配置文件

[html]  view plain  copy
  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.         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">  
  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>  

测试代码

[java]  view plain  copy
  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. }  

测试结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值