javascript
【SSM面向CRUD编程专栏 2】Spring相关API 数据源(连接池)的配置 注解开发 整合junit
🛫更多ssm知識(shí)見SSM_面向CRUD編程專欄
🚕本博客總結(jié)自黑馬程序員的ssm框架視頻
🚒博主對(duì)于該知識(shí)尚在學(xué)習(xí)階段
🚄如果發(fā)現(xiàn)存在問題請(qǐng)毫不吝嗇的指出
🚀🚀扎哇太棗糕的博客主頁🚀🚀
目錄
1 Spring相關(guān)API
2 Spring配置數(shù)據(jù)源
3 Spring注解開發(fā)
?4?Spring整合Junit
1 Spring相關(guān)API
創(chuàng)建Spring客戶端對(duì)象
創(chuàng)建Spring客戶端對(duì)象主要是依靠多態(tài)的方式使用ApplicationContext接口的以下三個(gè)實(shí)現(xiàn)類:
ClassPathXmlApplicationContext類
這個(gè)類的參數(shù)使用的是相對(duì)路徑,xml文件需要在項(xiàng)目下的resource文件夾下進(jìn)行配置
FileSystemXmlApplicationContext類
這個(gè)類的參數(shù)使用的是絕對(duì)路徑,xml文件可以在任何地方進(jìn)行配置,但是缺點(diǎn)是一旦配置文件修改位置或者是將項(xiàng)目在其他電腦上運(yùn)行的話基本上就是報(bào)錯(cuò)無法正常運(yùn)行。
?AnnotationConfigApplicationContext類
使用注解配置容器對(duì)象的使用此類創(chuàng)建Spring容器讀取注解,先行了解,后續(xù)的學(xué)習(xí)再使用。在博客的最后一小塊進(jìn)行了介紹使用。
獲取Bean對(duì)象
getBean(String id)
通過唯一id標(biāo)識(shí)去創(chuàng)建bean對(duì)象,好處是id標(biāo)識(shí)唯一確定一個(gè)bean類,不會(huì)創(chuàng)建錯(cuò)
getBean(Class<T> type)
通過bean類創(chuàng)建bean對(duì)象,壞處就是配置文件里的bean類不止一個(gè),如果此時(shí)配置文件里bean類的標(biāo)簽不唯一就會(huì)拋NoUniqueBeanDefinitionExceptionBean定義不唯一異常
2 Spring配置數(shù)據(jù)源
? ? ? ? ?數(shù)據(jù)源又被稱為是連接池其出現(xiàn)的目的是為了提高程序的性能,數(shù)據(jù)源可以事先實(shí)例化源數(shù)據(jù)并初始化部分連接資源,使用連接資源的時(shí)候可以從數(shù)據(jù)源中獲取,使用完畢之后再將連接資源還給數(shù)據(jù)源。常見的數(shù)據(jù)源有DBCP、C3P0、BoneCP、Druid等。
????????Druid數(shù)據(jù)源的創(chuàng)建方式有很多種:手動(dòng)創(chuàng)建、使用配置文件解耦合、使用spring框架依賴注入并解耦合,他們的學(xué)習(xí)是層層遞進(jìn)的,要從手動(dòng)開始最后引入spring框架這樣便于加深理解。
手動(dòng)創(chuàng)建Druid數(shù)據(jù)源
第一步:通過pom文件依賴坐標(biāo)的方式導(dǎo)入兩個(gè)數(shù)據(jù)源需要使用的jar包? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 第二步:創(chuàng)建數(shù)據(jù)源對(duì)象并設(shè)置基本連接信息,最后歸還資源? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
將數(shù)據(jù)源對(duì)象的基本連接信息設(shè)置抽取出來到配置文件,實(shí)現(xiàn)解耦合
第一步:通過pom文件依賴坐標(biāo)的方式導(dǎo)入兩個(gè)數(shù)據(jù)源需要使用的jar包 (跟上一個(gè)相同)
第二步:配置配置文件,配置文件的后綴是properties,也就是使用鍵值對(duì)的形式存儲(chǔ)配置信息
第三步:創(chuàng)建數(shù)據(jù)源對(duì)象并設(shè)置基本連接信息,最后歸還資源
🔥使用Spring依賴注入的方式創(chuàng)建Druid數(shù)據(jù)源,并實(shí)現(xiàn)解耦合最終進(jìn)化版本,以后的使用模板
第一步:導(dǎo)入spring-contest依賴和以上兩種依賴
?第二步:配置配置文件,存儲(chǔ)數(shù)據(jù)源配置信息
第三步:創(chuàng)建applicationContext.xml配置文件并配置bean標(biāo)簽
?第四步:創(chuàng)建數(shù)據(jù)源對(duì)象操作連接最后歸還資源
3 Spring注解開發(fā)
Spring的原始注解
通過案例了解注解開發(fā)
????????注解開發(fā)的優(yōu)勢(shì)就在于進(jìn)一步使用反射封裝代碼,簡(jiǎn)化xml配置文件的內(nèi)容,使用注解就可以代替xml配置文件的bean標(biāo)簽配置。
在使用注解開發(fā)之前,xml文件里要使用UserDaoImpl類的bean標(biāo)簽創(chuàng)建對(duì)象,使用UserServiceImpl類的bean標(biāo)簽創(chuàng)建對(duì)象的同時(shí)將上一個(gè)bean標(biāo)簽創(chuàng)建的對(duì)象通過set方法依賴注入到這個(gè)bean標(biāo)簽里。
依賴注入的有關(guān)注解
@Component:通用版的@Repository注解,無論哪一層都能用,缺點(diǎn)就是辨識(shí)度不高,無法通過注解理清楚這是哪一層的業(yè)務(wù)
@Repository:Dao層的@Component注解用于實(shí)例化Bean,加上字符串參數(shù)相當(dāng)于一個(gè)<bean>標(biāo)簽設(shè)置了唯一id標(biāo)識(shí)。這個(gè)注解的作用相當(dāng)于圖中上面一行的<bean>標(biāo)簽。
@Controller:controller層的@Component注解用于實(shí)例化Bean
@Service:?Service層的@Component注解用于實(shí)例化Bean,用法和意義同上一個(gè)
@Autowired: 用于依賴注入,加入注解后就說明下面的變量定義用到了依賴注入
@Qualifier:用于指定注入對(duì)象相當(dāng)于ref屬性
當(dāng)然這種依賴注入還可以進(jìn)一步簡(jiǎn)寫。就是只保留@Autowired注解舍去@Qualifier注解,再將set方法的定義舍去。之所以這么做也能成功的原因是:xml配置文件里面只有一個(gè)這種類型的bean標(biāo)簽,此時(shí)只會(huì)唯一將該bean對(duì)象注入進(jìn)去,不會(huì)出現(xiàn)像使用getBean方法時(shí)參數(shù)傳class對(duì)象但是bean不唯一拋異常的問題。只使用一個(gè)@Autowired注解的話,需要保證只有一個(gè)同類型的bean被注入到spring容器中。不管是用哪種方式,使用幾個(gè)注解,set方法的定義都可以省略不寫,注解底層已經(jīng)通過反射機(jī)制為我們創(chuàng)建好了。
@Resource:如果出現(xiàn)了xml配置文件里面不只有一個(gè)這種類型的bean標(biāo)簽的情況時(shí),相當(dāng)于下面這種情況一個(gè)類創(chuàng)建了兩個(gè)標(biāo)簽,這個(gè)時(shí)候就用到了這個(gè)注解
?
除了使用注解之外,還要在xml文件使用標(biāo)簽掃描注解,讓spring容器知道都使用了哪些注解并實(shí)現(xiàn)對(duì)應(yīng)的功能
數(shù)據(jù)注入的注解?
@Value:將基本數(shù)據(jù)類型和string字符串注給下面的變量
?除了直接注入數(shù)據(jù)的形式,還能引用spring容器中的數(shù)據(jù)進(jìn)行注入
其他注解
@Scope:與bean標(biāo)簽的scope屬性意思相同
?@PostConstruct:指明下面的方法是初始化方法
@PreDestory:指明下面的方法是銷毀方法
?新注解
注解開發(fā)的最終目的就是用注解取代xml配置文件的同時(shí)還不會(huì)降低代碼的解耦合能力,使用上面的注解進(jìn)行開發(fā)時(shí)還是無法替代全部的xml文件,依然有以下四種標(biāo)簽無法被注解所取代,需要使用新注解進(jìn)行開發(fā)取代xml文件
- 非自定義的bean(就像前面Druid數(shù)據(jù)源配置的bean標(biāo)簽,第三方j(luò)ar包給的bean無法取代)
- 加載properties文件的標(biāo)簽<context:property-placeholder>
- 組件掃描<context:component-scan>
- 引入其他配置文件的<import>
@Configuration:標(biāo)示這是Spring容器的核心配置類,相當(dāng)于xml配置文件
@ComponentScan:掃描包下注解,相當(dāng)于<context:component-scan>
@Import:導(dǎo)包,相當(dāng)于<import>
@property:?加載properties文件,相當(dāng)于<context:property-placeholder>
@Bean:在注解里將返回值是對(duì)象的方法實(shí)例化Bean,也就是說將方法返回的對(duì)象注入到Spring容器中供調(diào)用,也相當(dāng)于一個(gè)<bean>標(biāo)簽,只不過是用在方法上的。
由于xml文件此時(shí)已經(jīng)被注解鎖完全取代了,所以創(chuàng)建客戶端對(duì)象的時(shí)候就不能再使用ClassPathApplicationContext類,要使用第三種方式AnnotationConfigApplicationContext類
?4?Spring整合Junit
第一步:導(dǎo)入兩個(gè)依賴坐標(biāo)
第二步:加注解
@RunWith:替換原來的運(yùn)行期
@ContextConfiguration:指定配置文件(xml配置)或者配置類(注解配置)
?????????在使用spring整合Junit的時(shí)候遇到一個(gè)問題記錄一下: spring-context和spring-test的依賴版本不同導(dǎo)致控制臺(tái)拋出以下異常java.lang.NoClassDefFoundError: org/springframework/core/annotation/MergedAnnotations。解決方法:將兩個(gè)以來坐標(biāo)的版本改成一致即可。具體操作參考這篇博客:已解決:java.lang.NoClassDefFoundError: org/springframework/core/annotation/MergedAnnotations_ray2580的博客-CSDN博客
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
上一篇:【SSM面向CRUD編程專欄 1】Spring簡(jiǎn)介 xml配置文件 依賴注入 數(shù)據(jù)注入
下一篇:【SSM面向CRUD編程專欄 3】關(guān)于黑馬程序員最全SSM框架教程視頻,P37集老師跳過的模塊創(chuàng)建以及tomcat下載安裝配置和運(yùn)行等諸多問題
?
總結(jié)
以上是生活随笔為你收集整理的【SSM面向CRUD编程专栏 2】Spring相关API 数据源(连接池)的配置 注解开发 整合junit的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 苹果笔记本怎么安系统下载 苹果笔记本系统
- 下一篇: 清华同方电脑怎么优先启动u盘启动 清华同