欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
Spring AOP框架
原文:  } 

  


接口MethodBeforeAdvice只有一個(gè)方法before需要實(shí)現,它定義了advice的實(shí)現。before方法共用三個(gè)參數,它們提供了相當豐富的信息。參數Method m是advice開(kāi)始后執行的方法。方法名稱(chēng)可以用作判斷是否執行代碼的條件。Object[] args是傳給被調用的public方法的參數數組。當需要記日志時(shí),參數args和被執行方法的名稱(chēng),都是非常有用的信息。你也可以改變傳給m的參數,但要小心使用這個(gè)功能;編寫(xiě)最初主程序的程序員并不知道主程序可能會(huì )和傳入參數的發(fā)生沖突。Object target是執行方法m對象的引用。 

在下面的BeanImpl類(lèi)中,每個(gè)public方法調用前,都會(huì )執行advice: 

代碼: 
package com.company.springaop.test; 

public class BeanImpl implements Bean { 

  public void theMethod() { 
    System.out.println(this.getClass().getName() 
        + "." + new Exception().getStackTrace()[0].getMethodName() 
        + "()" 
        + " says HELLO!"); 
  } 



類(lèi)BeanImpl實(shí)現了下面的接口Bean: 

代碼: 
package com.company.springaop.test; 

public interface Bean { 
  public void theMethod(); 




雖然不是必須使用接口,但面向接口而不是面向實(shí)現編程是良好的編程實(shí)踐,Spring也鼓勵這樣做。 

pointcut和advice通過(guò)配置文件來(lái)實(shí)現,因此,接下來(lái)你只需編寫(xiě)主方法的Java代碼: 
代碼: 


package com.company.springaop.test; 

import org.springframework.context.ApplicationContext; 
import org.springframework.context.support.FileSystemXmlApplicationContext; 

public class Main { 

  public static void main(String[] args) { 
    //Read the configuration file 
    ApplicationContext ctx 
        = new FileSystemXmlApplicationContext("springconfig.xml"); 

    //Instantiate an object 
    Bean x = (Bean) ctx.getBean("bean"); 

    //Execute the public method of the bean (the test) 
    x.theMethod(); 
  } 




我們從讀入和處理配置文件開(kāi)始,接下來(lái)馬上要創(chuàng )建它。這個(gè)配置文件將作為粘合程序不同部分的“膠水”。讀入和處理配置文件后,我們會(huì )得到一個(gè)創(chuàng )建工廠(chǎng)ctx。任何一個(gè)Spring管理的對象都必須通過(guò)這個(gè)工廠(chǎng)來(lái)創(chuàng )建。對象通過(guò)工廠(chǎng)創(chuàng )建后便可正常使用。 

僅僅用配置文件便可把程序的每一部分組裝起來(lái)。 
代碼: 

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE beans PUBLIC  "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> 

<beans> 
  <!--CONFIG--> 
  <bean id="bean" class="org.springframework.aop.framework.ProxyFactoryBean"> 
    <property name="proxyInterfaces"> 
      <value>com.company.springaop.test.Bean</value> 
    </property> 
    <property name="target"> 
      <ref local="beanTarget"/> 
    </property> 
    <property name="interceptorNames"> 
      <list> 
        <value>theAdvisor</value> 
      </list> 
    </property> 
  </bean> 

  <!--CLASS--> 
  <bean id="beanTarget" class="com.company.springaop.test.BeanImpl"/> 

  <!--ADVISOR--> 
  <!--Note: An advisor assembles pointcut and advice--> 
  <bean id="theAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor"> 
    <property name="advice"> 
      <ref local="theBeforeAdvice"/> 
    </property> 
    <property name="pattern"> 
      <value>com\.company\.springaop\.test\.Bean\.theMethod</value> 
    </property> 
  </bean> 

  <!--ADVICE--> 
  <bean id="theBeforeAdvice" class="com.company.springaop.test.TestBeforeAdvice"/> 
</beans> 
  


四個(gè)bean定義的次序并不重要。我們現在有了一個(gè)advice,一個(gè)包含了正則表達式pointcut的advisor,一個(gè)主程序類(lèi)和一個(gè)配置好的接口,通過(guò)工廠(chǎng)ctx,這個(gè)接口返回自己本身實(shí)現的一個(gè)引用。 

BeanImpl和TestBeforeAdvice都是直接配置。我們用一個(gè)唯一的ID創(chuàng )建一個(gè)bean元素,并指定了一個(gè)實(shí)現類(lèi)。這就是全部的工作。 

advisor通過(guò)Spring framework提供的一個(gè)RegexMethodPointcutAdvisor類(lèi)來(lái)實(shí)現。我們用advisor的一個(gè)屬性來(lái)指定它所需的advice-bean。第二個(gè)屬性則用正則表達式定義了pointcut,確保良好的性能和易讀性。 

最后配置的是bean,它可以通過(guò)一個(gè)工廠(chǎng)來(lái)創(chuàng )建。bean的定義看起來(lái)比實(shí)際上要復雜。bean是ProxyFactoryBean的一個(gè)實(shí)現,它是Spring framework的一部分。這個(gè)bean的行為通過(guò)一下的三個(gè)屬性來(lái)定義: 




屬性proxyInterface定義了接口類(lèi)。 

屬性target指向本地配置的一個(gè)bean,這個(gè)bean返回一個(gè)接口的實(shí)現。 

屬性interceptorNames是唯一允許定義一個(gè)值列表的屬性。這個(gè)列表包含所有需要在beanTarget上執行的advisor。注意,advisor列表的次序是非常重要的。 



Spring工具 

雖然你可以手工修改Ant構建腳本,但使用SpringUI(譯注:SpringUI現在是Spring framework的一部分,并改名為spring-ide),使用Spring AOP變得很簡(jiǎn)單,只要點(diǎn)點(diǎn)鼠標即可。你可以把SpringUI安裝成Eclipse的一個(gè)plug-in。然后,你只需在你的project上右擊鼠標,并選擇“add Spring Project Nature”。在project屬性中,你可以在“Spring Project”下添加Spring配置文件。在編譯前把下面的類(lèi)庫加入project:aopalliance.jar,commons-logging.jar,jakarta-oro-2.0.7.jar和spring.jar。運行程序時(shí)你會(huì )看到下面的信息: 

... (logging information) 
Hello world! (by com.company.springaop.test.TestBeforeAdvice) 
com.company.springaop.test.BeanImpl.theMethod() says HELLO! 


優(yōu)點(diǎn)和缺點(diǎn) 

Spring比起其他的framework更有優(yōu)勢,因為除了AOP以外,它提供了更多別的功能。作為一個(gè)輕型framework,它在J2EE不同的部分都可以發(fā)揮作用。因此,即使不想使用Spring AOP,你可能還是想使用Spring。另一個(gè)優(yōu)點(diǎn)是,Spring并不要求開(kāi)發(fā)團隊所有的人員都會(huì )用它。學(xué)習Spring應該從Spring reference的第一頁(yè)開(kāi)始。讀了本文后,你應該可以更好地理解Spring reference了。Spring唯一的缺點(diǎn)是缺乏更多的文檔,但它的mailing list是個(gè)很好的補充,而且會(huì )不斷地出現更多的文檔。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Spring AOP 學(xué)習小結
Spring IOC和AOP 原理徹底搞懂
Spring源碼分析之AOP從解析到調用
SPRING AOP雜記
【第六章】 AOP 之 6.4 基于@AspectJ的AOP ——跟我學(xué)spring3
簡(jiǎn)單理解Spring之IOC和AOP及代碼示例
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久