首页 > 编程语言 > 详细

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

时间:2016-06-02 11:39:46      阅读:488      评论:0      收藏:0      [点我收藏+]

在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>有什么区别?

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!