遇到的問(wèn)題:Bean沒(méi)有找到
(NoSuchBeanDefinitionException: No qualifying bean of type [com.dao.Dao] found for dependency:)
解決過(guò)程:
我就通過(guò)分析整個(gè)bean加載流程抄瓦,來(lái)提示過(guò)程中可能出錯(cuò)的地方躏啰。
(一)
Context(上下文)相當(dāng)于一個(gè)“容器”,起到承上啟下的作用榨馁,可以加載bean、也可以調(diào)用其中的bean。
ApplicationContext(bean容器)
它可以加載配置文件中定義的bean,將所有的bean集中在一起澄港,當(dāng)有請(qǐng)求的時(shí)候分配bean。
ApplicationContext實(shí)現(xiàn)方式(獲得bean):
1.FileSystemXmlApplicationContext
2.ClassPathXmlApplicationContext
注意:要加載哪個(gè)bean就添加對(duì)應(yīng)的bean配置文件柄沮。Bean配置文件出錯(cuò)會(huì)出現(xiàn)無(wú)法加載bean的問(wèn)題回梧。
=========================================================
(二)
jdbc
我們?cè)谧鰆dbc的時(shí)候會(huì)編寫Dao接口和Dao實(shí)現(xiàn)類。
缺點(diǎn):
(1)dao接口實(shí)現(xiàn)類方法中存在大量模板方法铡溪,如:通過(guò)SqlSessionFactory創(chuàng)建SqlSession漂辐,調(diào)用SqlSession的數(shù)據(jù)庫(kù)操作方法泪喊。
(2)調(diào)用sqlSession的數(shù)據(jù)庫(kù)操作方法需要指定statement的id棕硫,這里存在硬編碼(就是在程序中將代碼寫死)。
mybatis框架
Mapper動(dòng)態(tài)代理方式:只需要寫Mapper接口袒啼,然后按照規(guī)范進(jìn)行配置哈扮,MyBatis就會(huì)自動(dòng)實(shí)現(xiàn)類似Dao實(shí)現(xiàn)。
spring+mybatis框架
mybatis-spring.jar包中提供了MapperScannerConfigurer(API)
根據(jù)指定包批量掃描Mapper接口生成實(shí)例蚓再,并注冊(cè)對(duì)應(yīng)的MapperFactoryBean對(duì)象滑肉。如下圖:
注意:如果掃描包的位置出錯(cuò),也可能出現(xiàn)找不到bean的情況摘仅。
前面的ClassPathXmlApplicationContext("classpath:conf/spring*.xml")靶庙;
會(huì)自動(dòng)掃描“以sping為開(kāi)頭的”xml配置文件中的bean。并注入到ApplicationContext中娃属。
-----------------------------------------------------------------------------------------------------------------------
技能樹(shù).IT修真院
“我們相信人人都可以成為一個(gè)工程師六荒,現(xiàn)在開(kāi)始,找個(gè)師兄矾端,帶你入門掏击,掌控自己學(xué)習(xí)的節(jié)奏,學(xué)習(xí)的路上不再迷弥让”砚亭。
這里是技能樹(shù).IT修真院,成千上萬(wàn)的師兄在這里找到了自己的學(xué)習(xí)路線,學(xué)習(xí)透明化捅膘,成長(zhǎng)可見(jiàn)化添祸,師兄1對(duì)1免費(fèi)指導(dǎo)⊙罢蹋快來(lái)與我一起學(xué)習(xí)吧 膝捞!IT修真院:http://www.jnshu.com/login/1/10031132