码迷,mamicode.com
首页 > 编程语言 > 详细

spring 中的<aop:advisor>和<aop:aspect>有什么区别?

时间:2016-06-02 11:40:28      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:spring

在xml中

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

           http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

           http://www.springframework.org/schema/context

           http://www.springframework.org/schema/context/spring-context-3.0.xsd

           http://www.springframework.org/schema/aop

           http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">

           

   <bean id="helloWorldService" class="cn.javass.spring.chapter6.service.impl.HelloWorldService"/>


   <bean id="aspect" class="cn.javass.spring.chapter6.aop.HelloWorldAspect"/>


   <bean id="beforeAdvice" class="cn.javass.spring.chapter6.aop.BeforeAdviceImpl"/>

    

    <aop:config>

        <aop:advisor pointcut="execution(* cn.javass..*.sayAdvisorBefore(..))"

                     advice-ref="beforeAdvice"/>

        <aop:aspect ref="aspect">

             <aop:before pointcut="execution(* cn.javass..*.sayBefore(..)) and args(param)" 

                         method="beforeAdvice(java.lang.String)" 

                         arg-names="param"/>

             <aop:after-returning pointcut="execution(* cn.javass..*.sayAfterReturning(..))" 

                                  method="afterReturningAdvice" 

                                  arg-names="retVal"

                                  returning="retVal"/>

             <aop:after-throwing pointcut="execution(* cn.javass..*.sayAfterThrowing(..))" 

                                  method="afterThrowingAdvice" 

                                  arg-names="exception"

                                  throwing="exception"/>


             <aop:after pointcut="execution(* cn.javass..*.sayAfterFinally(..))" 

                       method="afterFinallyAdvice"/>


             <aop:around pointcut="execution(* cn.javass..*.sayAround(..))" 

                         method="aroundAdvice"/>

                         

            <aop:declare-parents types-matching="cn.javass..*.IHelloWorldService+" 

                                 implement-interface="cn.javass.spring.chapter6.service.IIntroductionService"

                                 default-impl="cn.javass.spring.chapter6.service.impl.IntroductiondService"/>

        </aop:aspect>

    </aop:config>

        

   

</beans>





java中例子1

    @Test

    public void testSchemaBeforeAdvice() {

        System.out.println("======================================");

        ApplicationContext ctx = new ClassPathXmlApplicationContext("chapter6/advice.xml");

        IHelloWorldService helloworldService = ctx.getBean("helloWorldService", IHelloWorldService.class);

        helloworldService.sayBefore("before");

        System.out.println("======================================");

    }


例子2


    @Test

    public void testSchemaAdvisor() {

        System.out.println("======================================");

        ApplicationContext ctx = new ClassPathXmlApplicationContext("chapter6/advice.xml");

        IHelloWorldService helloworldService = ctx.getBean("helloWorldService", IHelloWorldService.class);

        helloworldService.sayAdvisorBefore("haha");

        System.out.println("======================================");

    }




这里说明一下 

所以“<aop:aspect>”实际上是定义横切逻辑,就是在连接点上做什么,“<aop:advisor>”则定义了在哪些连接点应用什么<aop:aspect>。Spring这样做的好处就是可以让多个横切逻辑(即<aop:aspect>定义的)多次使用,提供可重用性。

spring 中的<aop:advisor>和<aop:aspect>有什么区别?

标签:spring

原文地址:http://7129486.blog.51cto.com/7119486/1785414

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!