成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

項(xiàng)目中為什么一定要用Spring?什么是Spring四種策略?

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

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

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

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

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

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

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

1、輕量級(jí)POJO

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

2、依賴注入

任何一個(gè)有實(shí)際意義的應(yīng)用,肯定是會(huì)有多個(gè)類組成,在沒有Spring的時(shí)候,每個(gè)對(duì)象負(fù)責(zé)管理著與自己相互協(xié)作的對(duì)象的引用,這樣會(huì)導(dǎo)致高耦合和難以測(cè)試的代碼。

  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在自己的構(gòu)造函數(shù)中自己創(chuàng)建了 Water對(duì)象,這樣就造成了這兩個(gè)對(duì)象的緊耦合,這個(gè)火車可以運(yùn)水來澆灌農(nóng)田,但是如果讓這個(gè)火車來運(yùn)煤供暖,可能就不太符合了。

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

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

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

  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.  } 

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

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

  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <!--DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" 
  3.  "http://www.springframework.org/dtd/spring-beans.dtd" --> 
  4. <beans xmlns="http://www.springframework.org/schema/beans" 
  5.  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  6.  xsi:schemaLocation="http://www.springframework.org/schema/beans 
  7. http://www.springframework.org/schema/beans/spring-beans.xsd"> 
  8.  <bean id="train" class="com.kr.caption.spring.Train"
  9.  <constructor-arg ref="water"/> 
  10.  </bean> 
  11.  <bean id="water" class="com.kr.caption.spring.Water"/> 
  12. </beans> 

在上面的xml文件中,兩個(gè)對(duì)象被聲明為了Spring中的bean,在Train中,在構(gòu)造時(shí)傳入了對(duì)Water的引用,作為構(gòu)造器參數(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通過應(yīng)用的上下文,來裝載bean的定義,并把他們組裝起來,Spring應(yīng)用上下文全權(quán)負(fù)責(zé)對(duì)象的創(chuàng)建和組裝,Spring有多種上下文的實(shí)現(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)建了一個(gè)Spring應(yīng)用上下文,隨后就能得到一個(gè)實(shí)例對(duì)象,直接調(diào)用方法即可。

3、面向切面編程

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

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

 

項(xiàng)目中為什么一定要用Spring?什么是Spring四種策略?

 

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

責(zé)任編輯:武曉燕 來源: 今日頭條
相關(guān)推薦

2018-08-24 09:02:26

2019-01-29 11:02:30

消息中間件Java互聯(lián)網(wǎng)

2022-03-21 07:40:08

線程池Executors方式

2021-03-05 11:02:14

iOS 14.5蘋果更新

2019-02-14 09:35:15

面試MQ中間件

2011-05-10 15:51:34

SEO

2022-04-24 09:54:24

ProxyReflect前端

2022-01-10 13:06:13

微服務(wù)API網(wǎng)關(guān)

2022-07-14 15:08:23

AI模型

2024-02-22 14:22:17

數(shù)字化轉(zhuǎn)型企業(yè)架構(gòu)

2024-11-13 00:58:28

2025-01-15 12:43:23

2018-07-02 08:57:27

碼農(nóng)業(yè)務(wù)程序員

2024-10-10 05:00:00

2017-08-17 11:11:41

深度學(xué)習(xí)弱智能機(jī)器學(xué)習(xí)

2022-05-26 09:24:09

volatile懶漢模式

2024-12-09 09:40:00

策略模式Java

2022-06-01 16:17:00

互聯(lián)網(wǎng)Web3區(qū)塊鏈

2024-11-20 10:30:00

AI架構(gòu)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 在线播放国产视频 | 精品欧美一区二区三区久久久 | 久久99蜜桃综合影院免费观看 | 亚洲美女网站 | 久久亚洲春色中文字幕久久久 | 国产精品一区久久久 | 99久久精品免费视频 | 最新中文字幕在线 | av永久 | av不卡一区 | 成人做爰999 | 精品国产一区二区三区久久久蜜月 | 中文字幕精品一区久久久久 | 亚洲精品视频在线观看视频 | 免费看黄视频网站 | 亚洲男人天堂网 | 羞羞涩涩在线观看 | 国产成人精品网站 | 日韩欧美三区 | 亚洲激情在线观看 | 欧美日本高清 | 欧美精品久久久久 | 岛国二区 | 亚洲品质自拍视频 | 亚洲高清视频一区二区 | 91久久久久久 | 精品少妇一区二区三区在线播放 | 久久99视频这里只有精品 | 国产免费一区二区 | 性色av一区 | 一级做a爰片久久毛片免费看 | 91亚洲国产精品 | 日韩在线中文字幕 | www.国产精品 | 久久国产精品一区二区三区 | 欧美成人a| 国产一区欧美一区 | 精品一区二区视频 | 久久九| 亚洲精品一 | 麻豆视频在线免费观看 |