您的位置:首页 > 编程语言 > Java开发

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

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

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

先定义个service接口

[java] view
plain copy

package org.study.spring.aop.base.xml;  

  

public interface BussinessService {  

      

    void doSomething();  

  

}  

具体实现:

[java] view
plain copy

package org.study.spring.aop.base.xml;  

  

public class BussinessServiceImpl implements BussinessService{  

  

    public void doSomething() {  

        System.out.println("BussinessServiceImpl do something");  

    }  

  

}  

通知(advice):

[java] view
plain copy

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的配置文件

[html] view
plain copy

<?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>  

测试代码

[java] view
plain copy

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();  

           

    }  

  

}  

测试结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: