av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

項目中為什么一定要用Spring?什么是Spring四種策略?

 相信每個Java開發(fā)人員在工作、學習中都了解Spring怎么使用,但對于一個初級的開發(fā)工程師來說,僅僅了解怎么使用,能夠很快的通過Spring來完成任務,這應該是足夠了,但是呢,如果你還想向更高的級別去前進,系統(tǒng)的學習,掌握它的底層原理是必不可少的。

創(chuàng)新互聯(lián)是一家專注于網(wǎng)站設計、成都做網(wǎng)站與策劃設計,高淳網(wǎng)站建設哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設十載,網(wǎng)設計領域的專業(yè)建站公司;建站業(yè)務涵蓋:高淳等地區(qū)。高淳做網(wǎng)站價格咨詢:028-86922220

每個人在面試的時候,Spring應該都是逃不過的關卡,能夠熟練的使用,這并不難,知道它的底層原理才是高出別人一步的地方。這篇文章就說簡單說下Spring的一些知識,希望能在面試的路上幫助到你們。

Spring是個開源框架,它被創(chuàng)建出來的初衷就是解決企業(yè)級應用開發(fā)的復雜性。Spring不僅僅局限于服務端開發(fā),任何的java應用都能借助于Spring變得更加簡單,可測試性更強,松耦合性更好。

為了降低Java開發(fā)的復雜性,Spring采取了一下4種關鍵策略:

  • 基于POJO的輕量級和最小侵入性編程;
  • 通過依賴注入和面向接口實現(xiàn)松耦合;
  • 基于切面和慣例進行聲明式編程;
  • 通過切面和模板減少樣板式代碼。

幾乎Spring所做的任何事情,都是圍繞著以上四種策略來實現(xiàn)的,其核心就是:簡化java開發(fā)。

1、輕量級POJO

在日常的開發(fā)過程中,可能大部分人都感受到了,很多框架都會強迫應用繼承他們的類或者是實現(xiàn)他們的接口,這樣就會導致程序和框架綁死,說到這,我們的現(xiàn)在所用的框架就是這樣,各個模塊,包括DAO,Service,都會強制性的繼承框架的中的類,應用程序和框架綁定的死死的。Spring竭力的避免因為自身的API來搞亂你的應用代碼,Spring也不會強迫你實現(xiàn)他的接口或者是繼承它的類,最嚴重的也就是一個雷會使用Spring注解。Spring的非侵入式編程意味著這個類在Spring應用和非Spring應用中發(fā)揮著同樣的作用。

2、依賴注入

任何一個有實際意義的應用,肯定是會有多個類組成,在沒有Spring的時候,每個對象負責管理著與自己相互協(xié)作的對象的引用,這樣會導致高耦合和難以測試的代碼。

 
 
 
 
  1. public class Train implements Transport{ 
  2.  private Water water; 
  3.  public Train() { 
  4.  water = new Water(); 
  5.  } 
  6.  public void catchGoods(){ 
  7.  water.waterSomthing(); 
  8.  } 

可以看到上面的代碼,Train在自己的構造函數(shù)中自己創(chuàng)建了 Water對象,這樣就造成了這兩個對象的緊耦合,這個火車可以運水來澆灌農(nóng)田,但是如果讓這個火車來運煤供暖,可能就不太符合了。

而在單元測試的時候,我們要確保catchGoods方法執(zhí)行的時候,waterSomthing也能夠執(zhí)行,如果這樣來做,那就執(zhí)行不了單元測試了。

耦合是具有兩面性的,一方面緊密的耦合的代碼,難以測試,難以服用,難以理解,修改了一處就可能會引起別的bug(記得剛去公司的時候,講開發(fā)規(guī)范,一個接口盡量的只做一件事情,千萬不要一個接口同時為多個地方提供服務),另一方面呢完全沒有耦合的代碼也什么都干不了。

有了Spring之后,對象的依賴關系由負責協(xié)調各對象的第三方組件來完成,對象無需自行創(chuàng)建,依賴注入會將所依賴的關系自動交給目標對象,而不是讓對象自己去獲取。

 
 
 
 
  1. public class Train implements Transport{ 
  2.  private Water water; 
  3.  public Train(Water water) { 
  4.  this.water = water; 
  5.  } 
  6.  public void catchGoods(){ 
  7.  water.waterSomthing(); 
  8.  } 

上面在我們的改動之后,不再由Train自行創(chuàng)建,而是當成一個構造器參數(shù)傳進來,這也是依賴注入的一種方式:構造器注入。這也就實現(xiàn)了松耦合。

創(chuàng)建應用組件之間協(xié)作的行為通常稱為裝配,Spring有著多種裝配bean的方式,XML就是一種常用的方式。

 
 
 
 
  1.  
  2.  
  3.  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  4.  xsi:schemaLocation="http://www.springframework.org/schema/beans 
  5. http://www.springframework.org/schema/beans/spring-beans.xsd"> 
  6.   
  7.   
  8.   
  9.   
  10.  

在上面的xml文件中,兩個對象被聲明為了Spring中的bean,在Train中,在構造時傳入了對Water的引用,作為構造器參數(shù)。

 
 
 
 
  1. @Configuration 
  2. public class TrainConfig { 
  3.  @Bean 
  4.  public Transport train(){ 
  5.  return new Train(water()); 
  6.  } 
  7.  @Bean 
  8.  public Water water(){ 
  9.  return new Water(); 
  10.  } 

上面的是基于java的配置,這兩種配置都是一樣的效果。

Spring通過應用的上下文,來裝載bean的定義,并把他們組裝起來,Spring應用上下文全權負責對象的創(chuàng)建和組裝,Spring有多種上下文的實現(xiàn),它們之間主要的區(qū)別僅僅在于如何加載配置。

 
 
 
 
  1. public class application { 
  2.  public static void main(String[] args) { 
  3.  ClassPathXmlApplicationContext context = 
  4.  new ClassPathXmlApplicationContext("classpath:application_example.xml"); 
  5.  Train bean = context.getBean(Train.class); 
  6.  bean.catchGoods(); 
  7.  } 

這里的main方法基于application_example.xml創(chuàng)建了一個Spring應用上下文,隨后就能得到一個實例對象,直接調用方法即可。

3、面向切面編程

系統(tǒng)由不同的組件組成,而這些組件除了實現(xiàn)自身的核心功能外,還承擔著其他的一些職責。比如日志、事務管理和安全這些通常會貫穿著整個項目中的各個組件。如果沒有系統(tǒng)性的處理這部分,那么你的代碼會含有大量的重復代碼。如果你把這些單獨抽象為一個模塊,其他模塊只是調用它的方法,方法的調用還是會出現(xiàn)各個模塊。

AOP會使這些服務模塊化,以聲明的方式應用到它們需要影響的模塊去,這樣其他的模塊就會只關注它們自身的業(yè)務,完全不需要了解這些服務的相關邏輯和代碼。

看到上面的圖片,我們可以把切面想象為覆蓋在很多組件上的一個外殼,借助AOP可以使那些功能層去包裹核心業(yè)務層,這些功能層以聲明的方式靈活的應用到系統(tǒng)中,其他的業(yè)務應用根本不知道它的存在。想了解更多Java學習資料,可以關注“武漢千鋒”微信公眾號獲取!


本文標題:項目中為什么一定要用Spring?什么是Spring四種策略?
鏈接地址:http://uogjgqi.cn/article/dhhghhe.html
掃二維碼與項目經(jīng)理溝通

我們在微信上24小時期待你的聲音

解答本文疑問/技術咨詢/運營咨詢/技術建議/互聯(lián)網(wǎng)交流