Spring分成四部分
IoC基礎(chǔ)容器
AOP面向切面編程
Spring整合Web環(huán)境
Web層解決方案-Spring MVC
三個思想
IoC - Inversion of Control
DI - Dependency Injection
AOP - Aspect Oriented Programming
Spring - 一個輕量級的開源Java開發(fā)應(yīng)用框架
在pom.xml中引入spring-context届慈,Maven會自動導(dǎo)入Beans,core和SpEL(Spring表達式)
BeanFactory - IoC
代碼實現(xiàn)(使用IDEA):
-
創(chuàng)建項目,選擇Maven
image.png -
修改pom.xml,添加依賴spring-context,刷新Maven圖標
image.png -
創(chuàng)建兩個個默認的接口和對應(yīng)的接口文件
image.png
小技巧:通過菜單Copy Reference可以拷貝完整路徑的類名
image.png -
在resource目錄下創(chuàng)建beans.xml配置文件,并添加第一個bean的定義
image.png
image.png -
在Main啟動類添加以下代碼搁进,并運行程序∥敉罚可以看到工廠自動創(chuàng)建的bean被打印出來了
image.png
小技巧:new創(chuàng)建的對象類和變量名可以通過.var自動生成
image.png
BeanFactory - DI
ApplicationContext - Spring的容器
BeanFactory和ApplicationContext的關(guān)系和區(qū)別
在Debug環(huán)境下能看到Context實例下的BeanFactory創(chuàng)建的多個Bean饼问,并存放在singletonObjects的HashMap里
繼承關(guān)系
Bean配置詳解
id - 可選,beanFactory下的singletonObjects map中的key揭斧,沒設(shè)置也沒name的時候莱革,類全路徑名作為key
name - 作為別名,用逗號分隔多個name讹开,beanFactory下的aliasMap map中會出現(xiàn)盅视,沒設(shè)置id的時候,第一個name作為key旦万,其他作為alias
scope - 默認singeton闹击,也可以是prototype,不會默認創(chuàng)建bean纸型,每次getBean都會生成一次拇砰,而且bean不會加入singletonObjects中梅忌。在單純spring-context模式下只有兩個選項狰腌,如果加入spring-mvc,會多session和request兩個選項
lazy-init - 默認false牧氮,對beanFactory無效
init-method - 先執(zhí)行完整的bean創(chuàng)建琼腔,例如包括通過property初始化;如果類加上
InitializingBean踱葛,則依次執(zhí)行丹莲;init-method最后執(zhí)行
destroy-method - 容器關(guān)閉,bean銷毀前調(diào)用
兩種構(gòu)造bean方法尸诽,構(gòu)造函數(shù)方法甥材,工廠方法
構(gòu)造方法:分為有參和無參;如果有參性含,用子標簽constructor-arg洲赵,這個子標簽不僅僅構(gòu)造函數(shù)用到,工廠方法創(chuàng)建時也會用到
工廠方法:分為靜態(tài)工廠,實例工廠叠萍,通過factoryBean規(guī)范來延遲實例化bean芝发,主要用于第三方庫,不是自己的源代碼
靜態(tài)工廠方式
實例工廠方式
factoryBean方式
通過實現(xiàn)FactoryBean接口類苛谷,Bean會延遲創(chuàng)建
創(chuàng)建出來的Bean會存放在factoryBeanObjectCache里辅鲸,SingletonObjects下只有factoryBean
依賴注入的數(shù)據(jù)類型
bean的set方法,構(gòu)造bean的方法
依賴注入的數(shù)據(jù)類型:普通屬性(value傳值)腹殿,對象(ref傳值)独悴,集合包括List,Map锣尉,Properties
數(shù)據(jù)類型Set和List類似
Properties和Map數(shù)據(jù)類型的注入
自動裝配绵患,參數(shù)byName,byType
根據(jù)Profile生成Bean
- 通過代碼設(shè)置Profile
-
通過命令行設(shè)置-Dspring.profiles.active=test
image.png
可以多個XML配置文件悟耘,由一個主的XML引入
Alias標簽同name落蝙,維護在aliasMap中
自定義命名空間標簽的使用
獲取bean的三種方法
- bean名字
- 類名字
-
bean名字+類名字 - 結(jié)果不用強轉(zhuǎn)
image.png
非自定義的Bean引入
-
直接通過Class引入,以Druid為例
image.png -
通過FactoryBean的靜態(tài)構(gòu)造方法暂幼,以jdbc的connection為例
image.png
持續(xù)更新中