Spring基本使用
- 2019 年 10 月 11 日
- 筆記

Spring基本使用
- 什麼是Spring?
- 什麼是Spring
- Spring特點
- 下載地址
- IOC控制反轉
- 原理
- 使用
- DI依賴注入
- bean相關配置
- 屬性注入
- 構造方法注入
- set屬性方式
- p:名稱空間
- 集合類型
- 使用註解
- 配置bean
- 屬性注入
- 註解與xml比較
- 註解與xml合併開發

01
什麼是Spring?
什麼是Spring?

Spring是一個開放源代碼的設計層面框架,
他解決的是業務邏輯層和其他各層的松耦合問題,因此它將面向接口的編程思想貫穿整個系統應用。
Spring是於2003 年興起的一個輕量級的Java 開發框架
簡單來說,Spring是一個分層的JavaSE/EE full-stack(一站式) 輕量級開源框架。
Spring的特點:
1.方便解耦,簡化開發
通過Spring提供的IoC容器,我們可以將對象之間的依賴關係交由Spring進行控制,避免硬編碼所造成的過度程序耦合。有了Spring,用戶不必再為單實例模式類、屬性文件解析等這些很底層的需求編寫代碼,可以更專註於上層的應用。
2.AOP編程的支持
通過Spring提供的AOP功能,方便進行面向切面的編程,
許多不容易用傳統OOP實現的功能可以通過AOP輕鬆應付。
3.聲明式事務的支持
在Spring中,我們可以從單調煩悶的事務管理代碼中解脫出來,
通過聲明式方式靈活地進行事務的管理,提高開發效率和質量。
4.方便程序的測試
可以用非容器依賴的編程方式進行幾乎所有的測試工作,在Spring里,測試不再是昂貴的操作,而是隨手可做的事情。例如:Spring對Junit4支持,可以通過註解方便的測試Spring程序。
5.方便集成各種優秀框架
Spring不排斥各種優秀的開源框架,相反,Spring可以降低各種框架的使用難度,Spring提供了對各種優秀框架(如Struts,Hibernate、Hessian、Quartz)等的直接支持。
6.降低Java EE API的使用難度
Spring對很多難用的Java EE API(如JDBC,JavaMail,遠程調用等)
提供了一個薄薄的封裝層,通過Spring的簡易封裝,這些Java EE API的使用難度大為降低。
7.Java 源碼是經典學習範例
Spring的源碼設計精妙、結構清晰、匠心獨運,處處體現着大師對Java設計模式靈活運用以及對Java技術的高深造詣。Spring框架源碼無疑是Java技術的最佳實踐範例。如果想在短時間內迅速提高自己的Java技術水平和應用開發水平,學習和研究Spring源碼將會使你收到意想不到的效果。
下載地址
https://repo.spring.io/list/libs-release-local/org/springframework/spring/3.2.0.RELEASE/
02
IOC控制反轉
IOC: Inversion of Control(控制反轉)
控制反轉:將對象的創建權反轉給(交給)Spring。
傳統開發模式業務和實現類過於緊密,業務變動會導致修改源代碼,下圖當需要換數據庫時則需要去改new的類換成新的,然而很多地方都用到了導致修改很多

通過工廠設計模式可以實現業務和實現分離,當換需要實現類時只需要修改工廠類中new的類,大大減少了修改。但終究還是需要修改源碼

在工廠內部使用配置文件加載,之後修改則只需要去修改配置文件即可,這就是Spring-IOC

Spring-IOC使用
第一步當然是創建工程添加java包

創建配置文件
applicationContext.xml

添加類交給Spring
Student.java

applicationContext.xml

測試
成功獲取到String創建的對象

03
DI依賴注入
依賴注入
前提必須有IOC的環境
Spring管理這個類的時候才能將類的依賴的屬性值注入(設置)進來
依賴注入:給spring管理類當中依賴的屬性,通過配置文件進行賦值的過程
使用
提供set方法的屬性才能注入


測試(對象帶有name=張三)

04
Bean相關配置
id/name屬性
id:使用了約束中的唯一約束。裏面不能出現特殊字符的
name:沒有使用約束中的唯一約束。裏面可以出現特殊字符。
init-method/destroy-method屬性
設置對象的生命周期方法



並且說明在加載配置文件後對象就被創建,而不是在getBean後創建
scope屬性:singleton/prototype(單例/多例創建)scope的缺省值就是singleton。所以上面加載配置文件就創建了對象,之後getBean同一個bean都是那一個對象。如果是prototype就每getBean一次就new一個對象
工廠的實例化方式
無參構造(默認):位元組碼調用無參構造創建對象
靜態工廠:指定一個靜態方法(factory-method)


實例工廠:指定另一個bean來創建當前bean的對象。

它的配置文件也是可以進行導入
比如Struts

在Spring中是

05
Spring屬性注入
屬性注入方式有很多
構造方法注入
給出了構造參數就會取找到有這些參數的構造方法創建對象同時也注入屬性


set方法注入


使用p:名稱空間
需要添加約束,相當於簡化了property的寫法

集合類型屬性的注入



06
使用註解配置
使用註解需要添加一個context約束,並需要aop包,最後還得配置組件掃描指定哪個包可以使用註解

使用

07
IOC註解詳解
Component
@Component(""):將類交給Spring管理
相當於配置文件<bean id="" class=""/>
並且衍生了三個註解和Component是一個意思,只是在不同的層用上了不同的名字
@Controller:web層
@Service:service層
@Repository:dao層
屬性注入
@Value(""):設置普通屬性值

@Autowired:設置對象類型的屬性值,不需要去給id指定類,它會根據被設置的屬性的類型去找到這個類並創建給它

上面它是自動識別需要注入值得字段是Book類型自動去找到Book類去創建對象,但想要指定類創建對象給字段也是可以
@Autowired註解與@Qualifier一起使用
或
單獨使用@Resource

@PreDestroy:標註方法為初始化方法
@PostConstruct:標註方法為銷毀時方法
相當於配置文件
init-method=""
destroy-method=""
@scope標註作用範圍
XML與註解比較
XML可以適用任何場景 ,結構清晰,維護方便
註解不是自己提供的類使用不了,開發簡單方便
XML與註解整合開發
XML管理Bean
註解完成屬性注入
使用過程中,可以不用掃描,掃描是為了類上的註解
在沒有掃描的情況下, 使用屬性註解
需要添加一條
<context:annotation-config/>
@Resource
@Value
@Autowired
@Qulifier