<del id="d4fwx"><form id="d4fwx"></form></del>
      <del id="d4fwx"><form id="d4fwx"></form></del><del id="d4fwx"><form id="d4fwx"></form></del>

            <code id="d4fwx"><abbr id="d4fwx"></abbr></code>
          • 在Spring中AOP怎么使用注解來實(shí)現(xiàn)

            這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)碛嘘P(guān)在Spring中AOP怎么使用注解來實(shí)現(xiàn),文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

            創(chuàng)新互聯(lián)是一家專業(yè)提供富錦企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、H5高端網(wǎng)站建設(shè)、小程序制作等業(yè)務(wù)。10年已為富錦眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)的建站公司優(yōu)惠進(jìn)行中。

            spring對(duì)AOP的實(shí)現(xiàn)提供了很好的支持。下面我們就使用Spring的注解來完成AOP做一個(gè)例子。

            首先,為了使用Spring的AOP注解功能,必須導(dǎo)入如下幾個(gè)包。aspectjrt.jar,aspectjweaver.jar,cglib-nodep.jar.然后我們寫一個(gè)接口

            package com.bird.service; 
             
            public interface PersonServer { 
             
              public void save(String name); 
              public void update(String name, Integer id); 
              public String getPersonName(Integer id); 
               
            } 
            
            

            和一個(gè)接口實(shí)現(xiàn)類

            package com.bird.service.impl; 
             
            import com.bird.service.PersonServer; 
             
            public class PersonServiceBean implements PersonServer{ 
               
              @Override 
              public void save(String name) { 
                 
                System.out.println("我是save方法"); 
              // throw new RuntimeException(); 
              } 
             
              @Override 
              public void update(String name, Integer id) { 
                 
                System.out.println("我是update()方法"); 
              } 
             
              @Override 
              public String getPersonName(Integer id) { 
                 
                System.out.println("我是getPersonName()方法"); 
                return "xxx"; 
              } 
             
            } 
            
            

            下面使用Spring注解方式對(duì)這個(gè)Bean進(jìn)行方法攔截

            package com.bird.service; 
             
            import org.aspectj.lang.ProceedingJoinPoint; 
            import org.aspectj.lang.annotation.After; 
            import org.aspectj.lang.annotation.AfterReturning; 
            import org.aspectj.lang.annotation.AfterThrowing; 
            import org.aspectj.lang.annotation.Around; 
            import org.aspectj.lang.annotation.Aspect; 
            import org.aspectj.lang.annotation.Before; 
            import org.aspectj.lang.annotation.Pointcut; 
             
            /** 
             * 切面 
             * @author Bird 
             * 
             */ 
            @Aspect 
            public class MyInterceptor { 
              @Pointcut("execution(* com.bird.service.impl.PersonServiceBean.*(..))") 
              private void anyMethod(){}//定義一個(gè)切入點(diǎn) 
               
              @Before("anyMethod() && args(name)") 
              public void doAccessCheck(String name){ 
                System.out.println(name); 
                System.out.println("前置通知"); 
              } 
               
              @AfterReturning("anyMethod()") 
              public void doAfter(){ 
                System.out.println("后置通知"); 
              } 
               
              @After("anyMethod()") 
              public void after(){ 
                System.out.println("最終通知"); 
              } 
               
              @AfterThrowing("anyMethod()") 
              public void doAfterThrow(){ 
                System.out.println("例外通知"); 
              } 
               
              @Around("anyMethod()") 
              public Object doBasicProfiling(ProceedingJoinPoint pjp) throws Throwable{ 
                System.out.println("進(jìn)入環(huán)繞通知"); 
                Object object = pjp.proceed();//執(zhí)行該方法 
                System.out.println("退出方法"); 
                return object; 
              } 
            } 
            @Pointcut("execution(* com.bird.service.impl.PersonServiceBean.*(..))") 

            這句話是方法切入點(diǎn),execution為執(zhí)行的意思,*代表任意返回值,然后是包名,.*意思是包下面的所有子包。(..)代表各種方法。然后下面的注解就比較簡單了,就是在使用方法前和中,還有環(huán)繞攔截/,然后在Spring的配置文件中繼續(xù)配置Bean,需要打開AOP命名空間

            <&#63;xml version="1.0" encoding="UTF-8"&#63;> 
            <beans xmlns="http://www.springframework.org/schema/beans" 
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                xmlns:aop="http://www.springframework.org/schema/aop" 
                xsi:schemaLocation=" 
                http://www.springframework.org/schema/beans  
                http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 
                http://www.springframework.org/schema/aop  
                http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"> 
                 
                <aop:aspectj-autoproxy/> 
              <bean id="personServiceBean" class="com.bird.service.impl.PersonServiceBean"/> 
              <bean id="myInterceptor" class="com.bird.service.MyInterceptor"/> 
               
            </beans> 
            
            

            然后建立一個(gè)Junit測試

            package junit.test; 
             
            import org.junit.Test; 
            import org.springframework.context.ApplicationContext; 
            import org.springframework.context.support.ClassPathXmlApplicationContext; 
             
            import com.bird.service.PersonServer; 
             
            public class SpringAOPTest { 
               
              @Test 
              public void inteceptorTest(){ 
                ApplicationContext ctx = new ClassPathXmlApplicationContext("beanAop.xml"); 
                PersonServer bean = (PersonServer)ctx.getBean("personServiceBean"); 
                bean.save(null); 
              } 
               
             
            } 
            
            

            測試結(jié)果為

            2012-3-12 18:08:39 org.springframework.context.support.AbstractApplicationContext prepareRefresh 
            信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@dd20f6: display name [org.springframework.context.support.ClassPathXmlApplicationContext@dd20f6]; startup date [Mon Mar 12 18:08:39 CST 2012]; root of context hierarchy 
            2012-3-12 18:08:40 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions 
            信息: Loading XML bean definitions from class path resource [beanAop.xml] 
            2012-3-12 18:08:40 org.springframework.context.support.AbstractApplicationContext obtainFreshBeanFactory 
            信息: Bean factory for application context [org.springframework.context.support.ClassPathXmlApplicationContext@dd20f6]: org.springframework.beans.factory.support.DefaultListableBeanFactory@b0bad7 
            2012-3-12 18:08:40 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons 
            信息: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@b0bad7: defining beans [org.springframework.aop.config.internalAutoProxyCreator,personServiceBean,myInterceptor]; root of factory hierarchy 
            null 
            前置通知 
            進(jìn)入環(huán)繞通知 
            我是save方法 
            后置通知 
            退出方法 
            最終通知 

            上述就是小編為大家分享的在Spring中AOP怎么使用注解來實(shí)現(xiàn)了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

            網(wǎng)站名稱:在Spring中AOP怎么使用注解來實(shí)現(xiàn)
            網(wǎng)站地址:http://www.jbt999.com/article32/pspppc.html

            成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站做網(wǎng)站定制開發(fā)營銷型網(wǎng)站建設(shè)網(wǎng)站設(shè)計(jì)網(wǎng)站設(shè)計(jì)公司

            廣告

            聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:[email protected]。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

            成都網(wǎng)站建設(shè)

              <del id="d4fwx"><form id="d4fwx"></form></del>
              <del id="d4fwx"><form id="d4fwx"></form></del><del id="d4fwx"><form id="d4fwx"></form></del>

                    <code id="d4fwx"><abbr id="d4fwx"></abbr></code>
                  • 成人网大香蕉视频 | 啪啪啪视频免费观看 | 欧美乱伦视频小说 | 一道本无码视频 | 日韩A片 要操逼网 |