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