不良網(wǎng)站代碼怎么查行者seo無敵
1.Spring概念【托管很多對(duì)象的框架】
一個(gè)包含了眾多工具方法的IoC容器。
1.1 什么是容器?
? ? 容器是用來容納各種物品的(基本)裝置。--來自百度百科
之前常見的容器有:
? ? ? List/Map-》數(shù)據(jù)存儲(chǔ)容器
? ? ? Tomcat-》Web容器
1.2什么是IoC?
IoC=Inversion of Control翻譯成中文就是“控制反轉(zhuǎn)”的意思,也就是說Spring是一個(gè)“控制反轉(zhuǎn)”的容器。
控制反轉(zhuǎn):對(duì)象的創(chuàng)建權(quán)反轉(zhuǎn)給別人了
? ? 比如:
? ? 創(chuàng)建一個(gè)類,A類引用B類,B類引用C類,C類引用D類的時(shí)候直接在構(gòu)造函數(shù)里面new,
會(huì)有一個(gè)問題,當(dāng)一個(gè)構(gòu)造方法發(fā)生變化的時(shí)候,整個(gè)調(diào)用鏈都要發(fā)生變化,不在new了,
而是把當(dāng)前的對(duì)象傳入進(jìn)來,這個(gè)時(shí)候雖然整個(gè)調(diào)用鏈還是A調(diào)用B,B類引用C類,C類引用D類,但是當(dāng)D發(fā)生變化的時(shí)候,CBA不需要進(jìn)行代碼修改,從而解決了代碼的耦合性,也就是IOC
降低代碼的耦合性。
基本功能:
? ? ? ? 1.將對(duì)象存入容器。????????
? ? ? ? 2.從容器中取出對(duì)象。
1.3 DI概念說明
? ? DI=Dependency Injection,依賴注入。所謂以來注入就是由IoC容器在運(yùn)行期間,動(dòng)態(tài)的將某種以來關(guān)系注入到對(duì)象之中。所以,以來注入和控制反轉(zhuǎn)是從不同的角度描述同一間事情,就是指通過引入IoC容器,利用依賴關(guān)系注入的方式,實(shí)現(xiàn)對(duì)象之間的解耦。
? 從廣義上來說IoC=DI,從不同維度來描述同一個(gè)問題。IoC是設(shè)計(jì)思想,DI是具體實(shí)現(xiàn)。
2.Spring概念【托管很多對(duì)象的框架】【單例+懶漢】
? ? ? 1.創(chuàng)建maven項(xiàng)目
? ? ? 2.添加Spring框架依賴(spring-context,spring-beans)
? ? ? 3.創(chuàng)建啟動(dòng)類
2.1 Spring對(duì)象的存儲(chǔ)
? ? ? ?1.先創(chuàng)建Bean對(duì)象
? ? ? ? 2.將對(duì)象存入到bean中
? ? ? ? (a)在resources下創(chuàng)建一個(gè)spring配置文件
? ? ? ? (b)將bean對(duì)象配置到spring配置文件中
? ? ? ? 3.從spring中讀取到Bean對(duì)象
? ? ? ? (a)根據(jù)名稱獲取Bean
? ? ? ? ? (b)根據(jù)Bean類型獲取Bean【容易出錯(cuò):當(dāng)Spring中存在相同的對(duì)象時(shí),使用類型來獲取Bean就會(huì)報(bào)錯(cuò)】
? ? ? ? (c)根據(jù)Bean名稱+Bean類型獲取Bean對(duì)象
獲取Spring對(duì)象的兩種方式:ApplicationContext和BeanFactory
相同點(diǎn):
- 都可以得到Spring上下文對(duì)象
- 都是來自Spring的頂級(jí)接口
不同點(diǎn):
繼承關(guān)系和功能:ApplicationContext屬于BeanFactory的子類:BeanFactory只有最基礎(chǔ)訪問Bean的能力,而ApplicationContext除了擁有BeanFactory功能之外,還包含了更多的功能:如國(guó)際化支持、資源訪問、事件傳播等。
ApplicationContext是一次性加載并初始化所有的Bean對(duì)象,所以在后面訪問Bean對(duì)象時(shí)會(huì)很快。而BeanFactory是需要某個(gè)Bean對(duì)象時(shí),采取加載Bean對(duì)象,所以他在執(zhí)行Bean獲取時(shí),比較慢。
更加簡(jiǎn)單的講對(duì)象存儲(chǔ)到Spring中
3. 五大類注解
@Controller:控制器
@service:服務(wù)
@Respository:倉庫
@Component:組件
@Configuration:配置
4.方法注解:@Bean-》將當(dāng)前修飾方法的方法對(duì)象存儲(chǔ)到Spring當(dāng)中。
約定>配置
1.如果類名首字母是小寫,要怎么從Spring中獲取Bean?
? ? 和首字母是大寫的是一致的,都是用的將類名首字母小寫的方式來獲取對(duì)象
2.如果首字母和第二字母都是大寫,會(huì)怎么樣?
? ? 當(dāng)使用默認(rèn)規(guī)則,首字母小寫獲取Bean對(duì)象時(shí),會(huì)失敗,正確獲取Bean的方式是使用原類名,就能成功獲取到了
3.項(xiàng)目中沒有目錄,所有的類都寫在java根路徑下,怎么存取Bean對(duì)象?
最佳方案:給項(xiàng)目創(chuàng)建合適的路徑【配置根路徑**加載比較慢,因?yàn)榕渲昧烁窂较滤械摹?/p>
結(jié)論:當(dāng)使用5大類注解的時(shí),默認(rèn)情況下獲取Bean對(duì)象,只需要將類名的首字母小寫即可;然而當(dāng)Bean對(duì)象首字母和第二個(gè)字母都是大寫的時(shí)候,此時(shí)需要使用原類名才能正確獲取到Bean對(duì)象。
5.為什么需要五個(gè)類注解?
a)通過類注解可以了解當(dāng)前類的用途(看到車牌 陜A 就知道這是西安的車一樣)
b)功能由細(xì)微的不同
五大類注解的用途
程序的工程分層,調(diào)用流程如下所示:
1.@Controller(控制器):表示的是業(yè)務(wù)邏輯層,用來控制用戶的行為,它用來檢查用戶此參數(shù)的有效性。
2.@Service(服務(wù)):歸屬于服務(wù)層,調(diào)用持久化類實(shí)現(xiàn)相應(yīng)的功能?!静恢苯雍蛿?shù)據(jù)庫交互的,類似于控制中心】
3.@Repository(倉庫):歸屬于持久層,是直接和數(shù)據(jù)庫進(jìn)行交互的。通常每一個(gè)表都會(huì)對(duì)應(yīng)一個(gè)@Repository
4.@Configuration(配置):歸屬于配置層,是用來配置當(dāng)前項(xiàng)目的一些信息。
5.Component(組件):歸屬于公共工具類。提供某些公共方法。
6.五大類注解的關(guān)系
@Component是除了@Component的所有類的父類。
存對(duì)象到Spring中實(shí)現(xiàn)方式2:
使用@Bean方法注解:將返回的對(duì)象存儲(chǔ)到Spring中。
注意事項(xiàng):@Bean注解一定要配合5大類注解一塊使用,否則是無效的注解。
當(dāng)給@Bean設(shè)置了name屬性之后,使用原方法名就不能獲取到對(duì)象了,只能使用設(shè)置的方法名
注入的三種方式:
@Autowired、@Resource
1.屬性注入
優(yōu)點(diǎn):實(shí)現(xiàn)簡(jiǎn)單
缺點(diǎn):
- 不能注入不可變(final)的對(duì)象、
- 只適用IoC容器、
- 更容易違背單一設(shè)計(jì)原則
2.setter方法注入
優(yōu)點(diǎn):更加符合單一設(shè)計(jì)原則
缺點(diǎn):
- 不能注入不可變(final)的對(duì)象、
- 注入對(duì)象可被修改【set方法是普通set方阿飛,可以被重復(fù)調(diào)用,在調(diào)用的時(shí)候就存在被修改的風(fēng)險(xiǎn)】
3.構(gòu)造方法注入【當(dāng)一個(gè)類中只有一個(gè)構(gòu)造方法的手,可以省略@Autowired】
優(yōu)點(diǎn):
- 可以注入不可變的對(duì)象
- 注入的對(duì)象不會(huì)被修改
? ? ? ?a)加了final修飾符
? ? ? ?b)構(gòu)造方法是隨著類加載只執(zhí)行一次的(不像set有可能執(zhí)行多次被修改的)
- 注入的對(duì)象會(huì)被完全初始化【使用構(gòu)造方法帶來的優(yōu)點(diǎn)】
- 通用性更好
缺點(diǎn):沒有屬性注入簡(jiǎn)單
小結(jié):日常開發(fā)中,使用屬性注入實(shí)現(xiàn)更簡(jiǎn)單的讀取Bean,依然是主流的實(shí)現(xiàn)方式。
@Autowired、@Resource的區(qū)別?
相同點(diǎn):都是用來實(shí)現(xiàn)依賴注入的
不同點(diǎn):
1.功能支持不同:
@Autowired支持屬性注入,setter注入、構(gòu)造方法注入
@Resource支持屬性注入和setter注入,但不支持構(gòu)造方法注入
2.出身不同:@Autowired來自Spring框架,@Resource來自JDK
3.參數(shù)支持不同:@Resource支持更多的參數(shù)設(shè)置,而@Autowired只支持required參數(shù)