Spring-全面詳解(學(xué)習(xí)總結(jié))
一、Spring介紹
簡(jiǎn)介
Spring 框架為現(xiàn)代基于 java 的企業(yè)應(yīng)用程序提供了一個(gè)全面的編程和配置模型——在任何類型的部署平臺(tái)上
特點(diǎn)、主要特點(diǎn)
1、非侵入式
2、容器
3、IoC
4、AOP
5、方便程序的測(cè)試
為什么要學(xué)?
主流市場(chǎng)推薦、學(xué)習(xí)的人數(shù)多、Spring社區(qū)活躍、工作需要、屬于開源框架、方便web開發(fā)、集成度高。
還因?yàn)镾pring具有 以下優(yōu)點(diǎn):
- 輕量級(jí):相較于EJB容器,Spring采用的IoC容器非常的輕量級(jí),基礎(chǔ)版本的Spring框架大約只有2MB。Spring可以讓開發(fā)者們僅僅使用POJO(Plain Old Java Object,相對(duì)于EJB)就能夠開發(fā)出企業(yè)級(jí)的應(yīng)用。這樣做的好處是,你不需要使用臃腫龐大的 EJB容器(應(yīng)用服務(wù)器),你只需要輕量的servlet容器(如Tomcat)。尤其在一些開發(fā)當(dāng)中,很稀缺內(nèi)存和CPU資源時(shí),采用Spring比EJB無論是開發(fā)還是部署應(yīng)用都更節(jié)約資源。
- 控制反轉(zhuǎn)(IOC):Spring使用控制反轉(zhuǎn)技術(shù)實(shí)現(xiàn)了松耦合。依賴被注入到對(duì)象,而不是創(chuàng)建或?qū)ふ乙蕾噷?duì)象。
- 面向切面編程(AOP): Spring支持面向切面編程,同時(shí)把應(yīng)用的業(yè)務(wù)邏輯與系統(tǒng)的服務(wù)分離開來。
- MVC框架:Spring MVC是一個(gè)非常好的MVC框架,可以替換其他web框架諸如Struts。
- 集成性:Spring非常容易和其他的流行框架一起集成開發(fā),這些框架包括:ORM框架,logging框架,JEE, Quartz,以及Struts等表現(xiàn)層框架。
- 事務(wù)管理:Spring強(qiáng)大的事務(wù)管理功能,能夠處理本地事務(wù)(一個(gè)數(shù)據(jù)庫(kù))或是全局事務(wù)(多個(gè)數(shù)據(jù),采用JTA)。
- 模塊分離:Spring框架是由模塊構(gòu)成的。雖然已經(jīng)有太多的包和類了,但它們都按照模塊分好類了,你只需要考慮你會(huì)用到的模塊,而不用理其他的模塊。
- 異常處理:由于Java的JDBC,Hibernate等API中有很多方法拋出的是checked exception,而很多開發(fā)者并不能很好的處理異常。Spring提供了統(tǒng)一的API將這些checked exception的異常轉(zhuǎn)換成Spring的unchecked exception。
- 單元測(cè)試:Spring寫出來的代碼非常容易做單元測(cè)試,可以采用依賴注射(Dependency Injection)將測(cè)試的數(shù)據(jù)注射到程序中。
Spring框架體系結(jié)構(gòu):
二、IOC(依賴注入)
Spring 容器IOC 和 bean介紹
本章介紹了控制反轉(zhuǎn)原則的 Spring 框架實(shí)現(xiàn)。也被稱為依賴注入。這是一個(gè)過程,對(duì)象僅通過構(gòu)造函數(shù)參數(shù)、工廠方法的參數(shù)或者在對(duì)象實(shí)例被構(gòu)造或者從工廠方法返回后在其上設(shè)置的屬性來定義它們的依賴關(guān)系(也就是說,它們使用的其他對(duì)象)。然后容器在創(chuàng)建 bean 時(shí)注入這些依賴項(xiàng)。這個(gè)過程從根本上來說是 bean 本身的逆過程(因此得名為控制反轉(zhuǎn)) ,通過使用類的直接構(gòu)造或服務(wù)定位器模式之類的機(jī)制來控制其依賴項(xiàng)的實(shí)例化或位置。
上面的話,簡(jiǎn)單的說就是 使用對(duì)象的人并不和對(duì)象有直接關(guān)聯(lián)。
控制反轉(zhuǎn):
控制反轉(zhuǎn)(Inversion of Control)是說創(chuàng)建對(duì)象的控制權(quán)發(fā)生轉(zhuǎn)移,以前創(chuàng)建對(duì)象的主動(dòng)權(quán)和創(chuàng)建時(shí)機(jī)由應(yīng)用程序把控,而現(xiàn)在這種權(quán)利轉(zhuǎn)交給 IoC 容器,它就是一個(gè)專門用來創(chuàng)建對(duì)象的工廠,你需要什么對(duì)象,它就給你什么對(duì)象。有了 IoC 容器,依賴關(guān)系就改變了,原先的依賴關(guān)系就沒了,它們都依賴 IoC容器了,通過 IoC 容器來建立它們之間的關(guān)系。
容器概述:
Context.applicationcontext 接口代表 spring ioc 容器,負(fù)責(zé)實(shí)例化、配置和裝配 bean。
- Spring IOC容器就是一個(gè)org.springframework.context.ApplicationContext的實(shí)例化對(duì)象
- 容器負(fù)責(zé)了實(shí)例化,配置以及裝配一個(gè)bean
ApplicationContext 接口表示 Spring IoC 容器,負(fù)責(zé)實(shí)例化、配置和裝配 bean。容器通過讀取配置元數(shù)據(jù)獲取關(guān)于實(shí)例化、配置和組裝什么對(duì)象的指令。配置元數(shù)據(jù)用 XML、 Java 注釋或 Java 代碼表示。它允許您表達(dá)組成應(yīng)用程序的對(duì)象以及這些對(duì)象之間豐富的相互依賴關(guān)系。
- ClassPathXmlApplicationContext
- FileSystemXmlApplicationContext
Spring 如何工作?
- Spring容器通過我們提交的pojo類以及配置元數(shù)據(jù)產(chǎn)生一個(gè)充分配置的可以使用的系統(tǒng)
- 這里說的配置元數(shù)據(jù),實(shí)際上我們就是我們提供的XML配置文件,或者通過注解方式提供的一些配置信息
bean介紹
在 Spring 中,構(gòu)成應(yīng)用程序主干的對(duì)象和由 Spring IoC 容器管理的對(duì)象稱為 bean。Bean 是由 Spring IoC 容器實(shí)例化、組裝和管理的對(duì)象。否則,bean 只是應(yīng)用程序中的許多對(duì)象之一。
配置元數(shù)據(jù)
- 傳統(tǒng)上,配置元數(shù)據(jù)是以一種簡(jiǎn)單和直觀的 XML 格式提供的
- 現(xiàn)在,大部分使用注解方式。
基本結(jié)構(gòu)
下面的示例顯示了基于 xml 的配置元數(shù)據(jù)的基本結(jié)構(gòu): <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="..." class="..."> <!-- collaborators and configuration for this bean go here --> </bean> <bean id="..." class="..."> <!-- collaborators and configuration for this bean go here --> </bean> <!-- more bean definitions go here --> </beans>
- id 屬性是標(biāo)識(shí)單個(gè) bean 定義的字符串
- class 屬性是全限定類名
AOP
面向切面編程,是針對(duì)面向?qū)ο缶幊痰囊环N補(bǔ)充,同時(shí)也是spring中第二個(gè)最核心的功能,例如可以進(jìn)行權(quán)限認(rèn)證,日志輸出等,可以無侵入的對(duì)原來的功能進(jìn)行切面加入自定義的非業(yè)務(wù)功能。
總結(jié)
本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
java正則表達(dá)式驗(yàn)證郵箱、電話號(hào)碼示例
這篇文章主要介紹了java正則表達(dá)式驗(yàn)證郵箱、電話號(hào)碼示例,需要的朋友可以參考下2014-03-03java對(duì)象序列化與反序列化的默認(rèn)格式和json格式使用示例
這篇文章主要介紹了java對(duì)象序列化與反序列化的默認(rèn)格式和json格式使用示例,需要的朋友可以參考下2014-02-02java使用@Transactional時(shí)常犯的N種錯(cuò)誤
@Transactional是我們?cè)谟肧pring時(shí)候幾乎逃不掉的一個(gè)注解,本文主要介紹了使用?@Transactional?時(shí)常犯的N種錯(cuò)誤,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01springMVC如何將controller中Model數(shù)據(jù)傳遞到j(luò)sp頁(yè)面
本篇文章主要介紹了springMVC如何將controller中Model數(shù)據(jù)傳遞到j(luò)sp頁(yè)面,具有一定的參考價(jià)值,有興趣的可以了解一下2017-07-07SpringBoot JPA實(shí)現(xiàn)增刪改查、分頁(yè)、排序、事務(wù)操作等功能示例
本篇文章主要介紹了SpringBoot JPA實(shí)現(xiàn)增刪改查、分頁(yè)、排序、事務(wù)操作等功能示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-03-03