-
1 # 莫得感情的小豬頭
-
2 # HelloWorld小碼農
spring簡介:是一個開源框架,是為了解決企業應用程式開發複雜性而建立的。框架的主要優勢之一就是其分層架構,分層架構允許您選擇使用哪一個元件,同時為 j2ee 應用程式開發提供整合的框架。
spring學習方法:
一、首先java的基礎、面向物件的基礎和設計模式的基礎知識是必不可少的。 關於設計模式我覺得不用學太多,但以下三個模式是學習spring必不可少的:factory模式(包括簡單工廠和抽象工廠), 策略模式,模板方法模式。如果不掌握這些你就根本沒法領悟spring的精髓,只能依樣畫葫蘆地照搬,這是很可怕的事。 我這裡強烈建議的書可能讓人有點意外,那就是expert one on one j2ee design and development的第四章,這一章不僅僅是spring初學者,而是任何搞java開發的人必讀的一章。經典!
二、接下可以看一些spring的入門書籍 其實我自己沒怎麼看過這方面的書,我當時只看過spring的reference,不過現在這方面的書好象多的是,而spring reference看起來還是有些吃力的。入門書應該是spring live或spring in action。
三、研究幾個用spring做的開源專案 理論還是要與實際結合,所以看完書後是要看實際的專案的。很多人喜歡appfuse,我覺得appfuse花的東西太多,真正實質性的內容又太少。我更喜歡spring自帶的jpetstore,這是一個非常完整的例子,看完後spring的基本用法應該都能掌握。四、開始做實際的專案 在上述這些都完備以後,我覺得應該要去實際專案中鍛鍊了。當然並不是每人都有這樣的機會的,這時只能自己做個玩具專案啦。專案的鍛鍊是非常關鍵的,其實每個人都清楚,我就不重複了。
五、繼續深入學習 經過專案的錘鍊,對spring的用法和原理有了一定的瞭解的時候,才有可能真正掌握spring的精髓。這時要讀的書才是rod johnson的三本經典名著,分別是: expert one on one j2ee design and development expert one on one j2ee without ejb professional java development with springframework 前兩本書的經典程度我就不說了,只有讀了它們,才能真正瞭解spring的設計意圖,掌握spring的精髓。 第三本書是我強烈不建議初學者讀的書。裡面的東西深入而全,但是原理講解得又不夠深,很容易讓初學者犯迷糊。但是卻是spring的高階使用者必讀的一本書。
六、分析原始碼,擴充套件spring 有人認為沒有必要分析spring的原始碼,因為這是很累人又不計好的事。但是要想成為spring的高階使用者,這是必經的階段。在學習的過程中,我們學到的不僅是spring,更重要的是他的設計思想。不管怎樣,看牛人的原始碼是絕對有好處的。不過這是一個很累人的過程,要有思考準備。
-
3 # 統計機器學習
(1) Spring概念
Spring是一個輕量級的控制反轉(IoC)和麵向切面(AOP)的容器框架
目的:解決企業應用開發的複雜性
功能:使用基本的JavaBean代替EJB,確保開發的簡單性、可測試性和松耦合性;同時提供更多的企業應用功能
範圍: Spring的用途不僅限於伺服器端的開發。從簡單性、可測試性和松耦合的角度而言,任何Java應用都可以從Spring中受益
(2)Spring特性
Spring是一個輕量級的控制反轉(IoC)和麵向切面(AOP)的容器框架。不管是SSH,還是SSM,都是由Spring透過IOC和AOP來對物件和物件組裝關係進行統一管理。所以學好Spring,就是要學好IOC和AOP。看程式碼,看Spring原始碼,都是以這兩者為核心。
輕量——從大小與開銷兩方面而言Spring都是輕量的。完整的Spring框架可以在一個大小隻有1MB多的JAR檔案裡釋出。並且Spring所需的處理開銷也是微不足道的。此外,Spring是非侵入式的:典型地,Spring應用中的物件不依賴於Spring的特定類和介面。
控制反轉——Spring透過一種稱作控制反轉(IoC)的技術促進了松耦合。當應用了IoC,一個物件依賴的其它物件會透過被動的方式傳遞進來,而不是這個物件自己建立或者查詢依賴物件。
面向切面——Spring提供了面向切面程式設計(AOP)的豐富支援,允許透過分離應用的業務邏輯與系統級服務(例如許可權、日誌和事務管理等)進行內聚性的開發。應用物件只實現它們應該完成的業務功能,不考慮其它的系統級關注點,例如日誌或事務支援。
容器——Spring包含並管理應用物件的配置和生命週期,在這個意義上它是一種容器,可以配置每個bean如何被建立(bean可以建立一個單獨的例項或者每次需要時都生成一個新的例項),以及它們是如何相互關聯的。
框架——Spring可以將簡單的元件配置、組合成為複雜的應用。在Spring中,應用物件被宣告式地組合,典型地是在一個XML檔案裡。Spring也提供了很多基礎功能(事務管理、持久化框架整合等等),將應用邏輯的開發留給了你。
(3)Spring帶來了複雜的J2EE框架開發的春天。
Spring具有如下優點:
低侵入式設計,程式碼的汙染度低;
獨立於各種應用伺服器,基於Spring框架的應用,可以真正實現Write Once,Run Anywhere;
Spring的IoC容器降低了業務物件的耦合性;
Spring的AOP支援允許將一些通用的功能(許可權、事務、日誌等)等集中處理,提升了複用性,同時讓開發者集中精力於業務功能的處理實現;
Spring的ORM和DAO提供了與第三方持久層框架的良好整合,並簡化了底層的資料庫訪問;
Spring是高度開放的,開發者可以自由選擇Spring框架的部分或全部。
(4)目前最流行的Java EE開發框架是SSM,這時就需要以Spring為核心配置與管理工具,掌握spring和spring-mvc進行整合,Spring和mybatis進行整合與配置的方法。才能從容進行基於SSM的Java EE專案的開發。
(5)SpringBoot
目前很火的SpringBoot也是以Spring為基礎,它是主要面向web服務,也就是微服務開發的。這個又是另外一個話題了。先學好Spring沒錯的。
劉嵩
2020.5.19
-
4 # 運維老男孩
學習Spring分三步:
瞭解它是什麼,解決了什麼問題補充前置知識學習如何使用SpringSpring是什麼
Spring用一句話概述就是:一個精巧的Bean容器。它擁有兩個非常重要的概念:IoC和AOP。
IoC
所謂的控制反轉。通俗地講,就是把原本需要程式設計師自己建立和維護的一大堆bean統統交由Spring管理。
各位將就看一下,此乃在下早期畫作,色彩運用有點氾濫...
也就是說,Spring將我們從盤根錯節的依賴關係中解放了。當前物件如果需要依賴另一個物件,只要打一個@Autowired註解,Spring就會自動幫你安裝上。
AOP
所謂的面向切面程式設計。通俗地講,它一般被用來解決一些系統交叉業務的織入,比如日誌啦、事務啥的。打個比方,UserService的method1可能要列印日誌,BrandService的method2可能也需要。就可以具體用程式碼展示就是:
這個切面,同時作用於3個方法,切面本身可以代表日誌,也可以代表事務
交叉業務的程式設計問題即為面向切面程式設計。而Spring AOP的做法其實是將切面程式碼移動到原始方法的周圍:
原先不用AOP時(圖一),交叉業務的程式碼直接硬編碼在方法內部的前後,而AOP則是把交叉業務寫在方法呼叫前後。那麼,為什麼AOP不把程式碼也寫在方法內部的前後呢?兩點原因:
首先,這與AOP的底層實現方式有關:動態代理其實就是代理物件呼叫目標物件的同名方法,並在呼叫前後加增強程式碼。
其次,這兩種最終執行效果是一樣的,所以沒什麼好糾結的。
AOP注重切面的模組化,即將切面程式碼做成一個可管理的狀態。比如日誌列印,不再是直接硬編碼在方法中的零散語句,而是做成一個切面類,透過通知方法去執行切面程式碼。
我相信大部分培訓班出來的朋友也就言盡於此,講完上面內容就準備收拾打卡下班了。
怎麼說呢,IOC按上面的解釋,雖然很淺,但也馬馬虎虎吧。然而AOP,很多人對它的認識是非常片面的...
這樣吧,我問你一個問題,現在我自己寫了一個UserController,以及UserServiceImpl implements UserService,並且在UserController中注入Service層物件:
@Autowired private UserService userService;
那麼,這個userService一定是我們寫的UserServiceImpl的例項嗎?
如果你聽不懂我要問什麼,說明你對Spring的AOP理解還是太少了。
實際上,Spring依賴注入的物件並不一定是我們自己寫的類的例項,也可能是userServiceImpl的代理物件。下面分別演示這兩種情況:
注入userServiceImpl物件注入的是UserServiceImpl型別
注入userServiceImpl的代理物件(CGLib動態代理)注入的是CGLib動態代理生成的userServiceImpl的代理物件
為什麼兩次注入的物件不同?
因為第二次我給UserServiceImpl加了@Transactional 註解。
此時Spring讀取到這個註解,便知道我們要使用事務。而我們編寫的UserService類中並沒有包含任何事務相關的程式碼。如果給你,你會怎麼做?動態代理嘛!
看到這裡,我彷彿聽到有一部分兄弟默默說了句:臥槽...
但是,上面對IOC和AOP的理解,也僅僅是應用級別,是一個面。僅僅瞭解到這個程度,對Spring的瞭解還是非常扁平的,不夠立體。但我覺得我已經把Spring的大概面貌展現出來了,接下來你可以自己學了。在此之前,我建議最好複習一下Java的高階知識點。
學習Spring的前置知識
Servlet只是學習Spring的話,其實可以不學Servlet,但web開發總是繞不開SpringMVC,SpringBoot也是如此。關於Servlet,主要是瞭解下生命週期方法、匹配路徑、GET/POST請求及引數處理。
註解註解非常重要,好多初學者不夠重視,這會導致後期在各種註解中迷失。而且現在大部分企業都在往Springboot、SpringCloud轉型,新的框架都大量地使用註解,非常重要。
反射框架的底層支撐,可以說是根本。很多初學者其實對反射雲裡霧裡的,不能很好地理解,更不明白怎麼用。其實註解搭配反射,可以玩出很多花樣。
動態代理Spring說穿了,就是IOC和AOP。動態代理在Spring中份量很重。
不過,千里之行始於足下,我覺得對於初學者來說,最重要的是知道Spring就是個很大的bean容器,還能自動裝配bean。
此時你再去學習Spring,就會事半功倍了。
回覆列表
學習spring要先掌握
1、《Java核心技術》前8章
2、Java反射原理
3、Servlet相關內容
進入正題
SpringFarmwork包括了AOP、IOC、SpringMVC等啥,其中aop與ioc要仔細學習,嘗試閱讀原始碼。
進而學習框架,這裡建議學習ssm、Springboot、Springcloud、Springdata為服務架構
然後找專案練習。
閱讀原始碼需要靜下心,要明白其道理,而不是匆匆而過,過程很枯燥。待到春花爛漫時,再回首,頗有一番滋味!加油!(保護好頭髮)