前言
為了鞏固所學(xué)的知識(shí),作者嘗試著開(kāi)始發(fā)布一些學(xué)習(xí)筆記類的博客,方便日后回顧。當(dāng)然,如果能幫到一些萌新進(jìn)行新技術(shù)的學(xué)習(xí)那也是極好的。作者菜菜一枚,文章中如果有記錄錯(cuò)誤,歡迎讀者朋友們批評(píng)指正。
(博客的參考源碼以及可以在我主頁(yè)的資源里找到,如果在學(xué)習(xí)的過(guò)程中有什么疑問(wèn)歡迎大家在評(píng)論區(qū)向我提出)
發(fā)現(xiàn)寶藏
前些天發(fā)現(xiàn)了一個(gè)巨牛的人工智能學(xué)習(xí)網(wǎng)站,通俗易懂,風(fēng)趣幽默,忍不住分享一下給大家?!緦毑厝肟凇俊?/p>
一、Spring是什么?
1.概述
- Spring Framework 是一個(gè)功能強(qiáng)大的 Java 應(yīng)用程序框架,旨在提供高效且可擴(kuò)展的開(kāi)發(fā)環(huán)境。
- 它結(jié)合了輕量級(jí)的容器(IOC)和 依賴注入(DI) 功能,提供了一種使用 POJO 進(jìn)行容器配置和面向切面的編程的簡(jiǎn)單方法,以及一組用于 AOP(切面編程) 的模塊。
- Spring 框架還支持各種移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù),如 Android 和 iOS。此外,它還提供了對(duì)事務(wù)管理、對(duì)象/關(guān)系映射、JavaBeans、JDBC、JMS 和其他技術(shù)的支持,從而確保高效開(kāi)發(fā)。
2.了解spring家族
3.spring系統(tǒng)概述
Spring 有可能成為所有企業(yè)應(yīng)用程序的一站式服務(wù)點(diǎn),然而,Spring 是模塊化的,允許你挑選和選擇適用于你的模塊,不必要把剩余部分也引入。下面的部分對(duì)在 Spring 框架中所有可用的模塊給出了詳細(xì)的介紹。
Spring 框架提供約 20 個(gè)模塊,可以根據(jù)應(yīng)用程序的要求來(lái)使用。
- 核心容器(Core Container)
核心容器由 spring-core,spring-beans,spring-context,spring-context-support和spring-expression(SpEL,Spring 表達(dá)式語(yǔ)言,Spring Expression Language)等模塊組成,它們的細(xì)節(jié)如下:
spring-core 模塊提供了框架的基本組成部分,包括 IoC 和依賴注入功能。
spring-beans 模塊提供 BeanFactory,工廠模式的微妙實(shí)現(xiàn),它移除了編碼式單例的需要,并且可以把配置和依賴從實(shí)際編碼邏輯中解耦。
context 模塊建立在由 core和 beans 模塊的基礎(chǔ)上建立起來(lái)的,它以一種類似于 JNDI 注冊(cè)的方式訪問(wèn)對(duì)象。Context 模塊繼承自 Bean 模塊,并且添加了國(guó)際化(比如,使用資源束)、事件傳播、資源加載和透明地創(chuàng)建上下文(比如,通過(guò) Servelet 容器)等功能。Context 模塊也支持 Java EE 的功能,比如 EJB、JMX 和遠(yuǎn)程調(diào)用等。ApplicationContext 接口是 Context 模塊的焦點(diǎn)。spring-context-support 提供了對(duì)第三方集成到 Spring 上下文的支持,比如緩存(EhCache, Guava, JCache)、郵件(JavaMail)、調(diào)度(CommonJ, Quartz)、模板引擎(FreeMarker, JasperReports, Velocity)等。
spring-expression 模塊提供了強(qiáng)大的表達(dá)式語(yǔ)言,用于在運(yùn)行時(shí)查詢和操作對(duì)象圖。它是 JSP2.1 規(guī)范中定義的統(tǒng)一表達(dá)式語(yǔ)言的擴(kuò)展,支持 set 和 get 屬性值、屬性賦值、方法調(diào)用、訪問(wèn)數(shù)組集合及索引的內(nèi)容、邏輯算術(shù)運(yùn)算、命名變量、通過(guò)名字從 Spring IoC 容器檢索對(duì)象,還支持列表的投影、選擇以及聚合等。
- 數(shù)據(jù)訪問(wèn)/集成(Data Access/Integration)
數(shù)據(jù)訪問(wèn)/集成層包括 JDBC,ORM,OXM,JMS 和事務(wù)處理模塊,它們的細(xì)節(jié)如下:
(注:JDBC=Java Data Base Connectivity,ORM=Object Relational Mapping,OXM=Object XML Mapping,JMS=Java Message Service)
JDBC 模塊提供了 JDBC 抽象層,它消除了冗長(zhǎng)的 JDBC 編碼和對(duì)數(shù)據(jù)庫(kù)供應(yīng)商特定錯(cuò)誤代碼的解析。
ORM 模塊提供了對(duì)流行的對(duì)象關(guān)系映射 API 的集成,包括 JPA、JDO 和 Hibernate 等。通過(guò)此模塊可以讓這些 ORM 框架和 spring的其它功能整合,比如前面提及的事務(wù)管理。
OXM 模塊提供了對(duì) OXM 實(shí)現(xiàn)的支持,比如 JAXB、Castor、XML Beans、JiBX、XStream 等。
JMS 模塊包含生產(chǎn)(produce)和消費(fèi)(consume)消息的功能。從 Spring 4.1 開(kāi)始,集成了 spring-messaging 模塊。
事務(wù)模塊為實(shí)現(xiàn)特殊接口類及所有的 POJO 支持編程式和聲明式事務(wù)管理。(注:編程式事務(wù)需要自己寫 beginTransaction()、commit()、rollback() 等事務(wù)管理方法,聲明式事務(wù)是通過(guò)注解或配置由 spring 自動(dòng)處理,編程式事務(wù)粒度更細(xì))
- Web
Web 層由 Web,Web-MVC,Web-Socket 和 Web-Portlet 組成,它們的細(xì)節(jié)如下:
Web 模塊提供面向 web 的基本功能和面向 web 的應(yīng)用上下文,比如多部分(multipart)文件上傳功能、使用 Servlet 監(jiān)聽(tīng)器初始化 IoC 容器等。它還包括 HTTP 客戶端以及 Spring 遠(yuǎn)程調(diào)用中與 web 相關(guān)的部分。
Web-MVC 模塊為 web 應(yīng)用提供了模型視圖控制(MVC)和 REST Web服務(wù)的實(shí)現(xiàn)。Spring 的 MVC 框架可以使領(lǐng)域模型代碼和 web 表單完全地分離,且可以與 Spring 框架的其它所有功能進(jìn)行集成。
Web-Socket 模塊為 WebSocket-based 提供了支持,而且在 web 應(yīng)用程序中提供了客戶端和服務(wù)器端之間通信的兩種方式。
Web-Portlet 模塊提供了用于 Portlet 環(huán)境的 MVC 實(shí)現(xiàn),并反映了 spring-webmvc 模塊的功能。
- Test模塊
Test 模塊:Spring 支持 Junit 和 TestNG 測(cè)試框架,而且還額外提供了一些基于 Spring 的測(cè)試功能,比如在測(cè)試 Web 框架時(shí),模擬 Http 請(qǐng)求的功能。
- 其他
還有其他一些重要的模塊,像 AOP,Aspects,Instrumentation,Web 和測(cè)試模塊,它們的細(xì)節(jié)如下:
AOP 模塊提供了面向方面(切面)的編程實(shí)現(xiàn),允許你定義方法攔截器和切入點(diǎn)對(duì)代碼進(jìn)行干凈地解耦,從而使實(shí)現(xiàn)功能的代碼徹底的解耦出來(lái)。使用源碼級(jí)的元數(shù)據(jù),可以用類似于.Net屬性的方式合并行為信息到代碼中。
Aspects 模塊提供了與 AspectJ 的集成,這是一個(gè)功能強(qiáng)大且成熟的面向切面編程(AOP)框架。
Instrumentation 模塊在一定的應(yīng)用服務(wù)器中提供了類 instrumentation 的支持和類加載器的實(shí)現(xiàn)。
Messaging 模塊為 STOMP 提供了支持作為在應(yīng)用程序中 WebSocket 子協(xié)議的使用。它也支持一個(gè)注解編程模型,它是為了選路和處理來(lái)自 WebSocket 客戶端的 STOMP 信息。
測(cè)試模塊支持對(duì)具有 JUnit 或 TestNG 框架的 Spring 組件的測(cè)試
4.spring優(yōu)點(diǎn)
- 方便解耦,簡(jiǎn)化開(kāi)發(fā)
Spring 就是一個(gè)大工廠,可以將所有對(duì)象的創(chuàng)建和依賴關(guān)系的維護(hù)交給 Spring 管理
- 方便集成各種優(yōu)秀框架
Spring 不排斥各種優(yōu)秀的開(kāi)源框架,其內(nèi)部提供了對(duì)各種優(yōu)秀框架(如 Struts2、Hibernate、MyBatis 等)的直接支持
- 降低 Java EE API 的使用難度
Spring 對(duì) Java EE 開(kāi)發(fā)中非常難用的一些 API(JDBC、JavaMail、遠(yuǎn)程調(diào)用等)都提供了封裝,使這些 API 應(yīng)用的難度大大降低
- 方便程序的測(cè)試
Spring 支持 JUnit4,可以通過(guò)注解方便地測(cè)試 Spring 程序
- AOP 編程的支持
Spring 提供面向切面編程,可以方便地實(shí)現(xiàn)對(duì)程序進(jìn)行權(quán)限攔截和運(yùn)行監(jiān)控等功能
- 聲明式事務(wù)的支持
只需要通過(guò)配置就可以完成對(duì)事務(wù)的管理,而無(wú)須手動(dòng)編程。
5.spring學(xué)習(xí)路線
二、入門spring
1.核心概念
- 依賴注入(DI)
-
Spring 最認(rèn)同的技術(shù)是控制反轉(zhuǎn)的依賴注入(DI)模式??刂品崔D(zhuǎn)(IoC)是一個(gè)通用的概念,它可以用許多不同的方式去表達(dá),依賴注入僅僅是控制反轉(zhuǎn)的一個(gè)具體的例子。
-
當(dāng)編寫一個(gè)復(fù)雜的 Java 應(yīng)用程序時(shí),應(yīng)用程序類應(yīng)該盡可能的獨(dú)立于其他的 Java 類來(lái)增加這些類可重用可能性,當(dāng)進(jìn)行單元測(cè)試時(shí),可以使它們獨(dú)立于其他類進(jìn)行測(cè)試。依賴注入(或者有時(shí)被稱為配線)有助于將這些類粘合在一起,并且在同一時(shí)間讓它們保持獨(dú)立。
-
到底什么是依賴注入?讓我們將這兩個(gè)詞分開(kāi)來(lái)看一看。這里將依賴關(guān)系部分轉(zhuǎn)化為兩個(gè)類之間的關(guān)聯(lián)。例如,類 A 依賴于類 B?,F(xiàn)在,讓我們看一看第二部分,注入。所有這一切都意味著類 B 將通過(guò) IoC 被注入到類 A 中。
-
依賴注入可以以向構(gòu)造函數(shù)傳遞參數(shù)的方式發(fā)生,或者通過(guò)使用 setter 方法 post-construction。由于依賴注入是 Spring 框架的核心部分,所以我將在一個(gè)單獨(dú)的章節(jié)中利用很好的例子去解釋這一概念。
2.面向切面的程序設(shè)計(jì)(AOP):
-
Spring 框架的一個(gè)關(guān)鍵組件是面向切面的程序設(shè)計(jì)(AOP)框架。一個(gè)程序中跨越多個(gè)點(diǎn)的功能被稱為橫切關(guān)注點(diǎn),這些橫切關(guān)注點(diǎn)在概念上獨(dú)立于應(yīng)用程序的業(yè)務(wù)邏輯。有各種各樣常見(jiàn)的很好的關(guān)于方面的例子,比如日志記錄、聲明性事務(wù)、安全性,和緩存等等。
-
在 OOP 中模塊化的關(guān)鍵單元是類,而在 AOP 中模塊化的關(guān)鍵單元是方面。AOP 幫助你將橫切關(guān)注點(diǎn)從它們所影響的對(duì)象中分離出來(lái),然而依賴注入幫助你將你的應(yīng)用程序?qū)ο髲谋舜酥蟹蛛x出來(lái)。
-
Spring 框架的 AOP 模塊提供了面向方面的程序設(shè)計(jì)實(shí)現(xiàn),可以定義諸如方法攔截器和切入點(diǎn)等,從而使實(shí)現(xiàn)功能的代碼徹底的解耦出來(lái)。使用源碼級(jí)的元數(shù)據(jù),可以用類似于 .Net 屬性的方式合并行為信息到代碼中。我將在一個(gè)獨(dú)立的章節(jié)中討論更多關(guān)于 Spring AOP 的概念。
- Spring IoC 容器
-
Spring 容器是 Spring 框架的核心。容器將創(chuàng)建對(duì)象,把它們連接在一起,配置它們,并管理他們的整個(gè)生命周期從創(chuàng)建到銷毀。Spring 容器使用依賴注入(DI)來(lái)管理組成一個(gè)應(yīng)用程序的組件。這些對(duì)象被稱為 Spring Beans
-
通過(guò)閱讀配置元數(shù)據(jù)提供的指令,容器知道對(duì)哪些對(duì)象進(jìn)行實(shí)例化,配置和組裝。配置元數(shù)據(jù)可以通過(guò) XML,Java 注釋或 Java 代碼來(lái)表示。下圖是 Spring 如何工作的高級(jí)視圖。 Spring IoC 容器利用 Java 的 POJO 類和配置元數(shù)據(jù)來(lái)生成完全配置和可執(zhí)行的系統(tǒng)或應(yīng)用程序
-
IOC 容器具有依賴注入功能的容器,它可以創(chuàng)建對(duì)象,IOC 容器負(fù)責(zé)實(shí)例化、定位、配置應(yīng)用程序中的對(duì)象及建立這些對(duì)象間的依賴。通常new一個(gè)實(shí)例,控制權(quán)由程序員控制,而"控制反轉(zhuǎn)"是指new實(shí)例工作不由程序員來(lái)做而是交給Spring容器來(lái)做。在Spring中BeanFactory是IOC容器的實(shí)際代表者。
-
Spring 提供了以下兩種不同類型的容器。
序號(hào) | 容器 & 描述 |
---|---|
1 | Spring BeanFactory 容器 :它是最簡(jiǎn)單的容器,給 DI 提供了基本的支持,它用 org.springframework.beans.factory.BeanFactory 接口來(lái)定義。BeanFactory 或者相關(guān)的接口,如 BeanFactoryAware,InitializingBean,DisposableBean,在 Spring 中仍然存在具有大量的與 Spring 整合的第三方框架的反向兼容性的目的。 |
2 | Spring ApplicationContext 容器 :該容器添加了更多的企業(yè)特定的功能,例如從一個(gè)屬性文件中解析文本信息的能力,發(fā)布應(yīng)用程序事件給感興趣的事件監(jiān)聽(tīng)器的能力。該容器是由 org.springframework.context.ApplicationContext 接口定義。 |
ApplicationContext 容器包括 BeanFactory 容器的所有功能,所以通常不建議使用BeanFactory。BeanFactory 仍然可以用于輕量級(jí)的應(yīng)用程序,如移動(dòng)設(shè)備或基于 applet 的應(yīng)用程序,其中它的數(shù)據(jù)量和速度是顯著。
- Spring Bean 定義
-
被稱作 bean 的對(duì)象是構(gòu)成應(yīng)用程序的支柱也是由 Spring IoC 容器管理的。bean 是一個(gè)被實(shí)例化,組裝,并通過(guò) Spring IoC 容器所管理的對(duì)象。這些 bean 是由用容器提供的配置元數(shù)據(jù)創(chuàng)建的,例如,已經(jīng)在先前章節(jié)看到的,在 XML 的表單中的 定義。
-
bean 定義包含稱為配置元數(shù)據(jù)的信息,下述容器也需要知道配置元數(shù)據(jù):
-
如何創(chuàng)建一個(gè) bean
-
bean 的生命周期的詳細(xì)信息
-
bean 的依賴關(guān)系
-
上述所有的配置元數(shù)據(jù)轉(zhuǎn)換成一組構(gòu)成每個(gè) bean 定義的下列屬性。
屬性 | 描述 |
---|---|
class | 這個(gè)屬性是強(qiáng)制性的,并且指定用來(lái)創(chuàng)建 bean 的 bean 類。 |
name | 這個(gè)屬性指定唯一的 bean 標(biāo)識(shí)符。在基于 XML 的配置元數(shù)據(jù)中,你可以使用 ID 和/或 name 屬性來(lái)指定 bean 標(biāo)識(shí)符。 |
scope | 這個(gè)屬性指定由特定的 bean 定義創(chuàng)建的對(duì)象的作用域,它將會(huì)在 bean 作用域的章節(jié)中進(jìn)行討論。 |
constructor-arg | 它是用來(lái)注入依賴關(guān)系的,并會(huì)在接下來(lái)的章節(jié)中進(jìn)行討論。 |
properties | 它是用來(lái)注入依賴關(guān)系的,并會(huì)在接下來(lái)的章節(jié)中進(jìn)行討論。 |
autowiring mode | 它是用來(lái)注入依賴關(guān)系的,并會(huì)在接下來(lái)的章節(jié)中進(jìn)行討論。 |
lazy-initialization mode | 延遲初始化的 bean 告訴 IoC 容器在它第一次被請(qǐng)求時(shí),而不是在啟動(dòng)時(shí)去創(chuàng)建一個(gè) bean 實(shí)例。 |
initialization 方法 | 在 bean 的所有必需的屬性被容器設(shè)置之后,調(diào)用回調(diào)方法。它將會(huì)在 bean 的生命周期章節(jié)中進(jìn)行討論。 |
destruction 方法 | 當(dāng)包含該 bean 的容器被銷毀時(shí),使用回調(diào)方法。它將會(huì)在 bean 的生命周期章節(jié)中進(jìn)行討論。 |
- Bean 與 Spring 容器的關(guān)系
## 5.spring三層架構(gòu)
A 表現(xiàn)層 web層 MVC是表現(xiàn)層的一個(gè)設(shè)計(jì)模型
B 業(yè)務(wù)層 service層
C 持久層 dao層
2.IOC入門案例
- 入門案例思路分析
- 創(chuàng)建maven模塊
- 編寫接口和Dao實(shí)現(xiàn)類(此時(shí)無(wú)spring環(huán)境,純JAVA開(kāi)發(fā))
-
模塊代碼結(jié)構(gòu)
-
BookDao
public interface BookDao {
public void save();
}
- BookDaoImpl
public class BookDaoImpl implements BookDao {
public void save() {
System.out.println("book dao save ...");
}
}
- BookService
public interface BookService {
public void save();
}
- BookServiceImpl
public class BookServiceImpl implements BookService {
private BookDao bookDao = new BookDaoImpl();
public void save() {
System.out.println("book service save ...");
bookDao.save();
}
}
- Main
public class Main {
public static void main(String[] args) {
BookService bookService = new BookServiceImpl();
bookService.save();
}
}
- Main類運(yùn)行結(jié)果
- 示例代碼解析
- 首先寫了兩個(gè)數(shù)據(jù)層接口 BookDao 和 BookService,兩個(gè)接口中都定義了save()方法
- 然后寫了兩個(gè)數(shù)據(jù)層接口的實(shí)現(xiàn)類 BookDaoImpl 和 BookServiceImpl,分別實(shí)現(xiàn)了save() 方法,方法里都要一條輸出語(yǔ)句,但是兩個(gè)實(shí)現(xiàn)類save方法打印的內(nèi)容不同
- 其中 BookServiceImpl 類中還通過(guò)new創(chuàng)建對(duì)象的方式調(diào)用了 BookDaoImpl的save方法
- 最后在Main類中通過(guò)new創(chuàng)建對(duì)象的方式調(diào)用了BookServiceImpl的save方法將兩個(gè)save()方法中的語(yǔ)句打印了出來(lái)
- 在pom.xml中導(dǎo)入spring坐標(biāo)spring-context
<dependencies>
<!--spring坐標(biāo)-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.21.RELEASE</version>
</dependency>
</dependencies>
- 創(chuàng)建spring核心配置文件applicationContext.xml
resources 目錄右鍵 --> new --> XML Configuration File --> Spring Config(導(dǎo)入spring坐標(biāo)后才有對(duì)應(yīng)選項(xiàng))
- 配置Bean(如下)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--1.導(dǎo)入spring的坐標(biāo)spring-context,對(duì)應(yīng)版本是5.2.10.RELEASE-->
<!--2.配置bean-->
<!--bean標(biāo)簽標(biāo)示配置bean
id屬性標(biāo)示給bean起名字
class屬性表示給bean定義類型-->
<bean id="bookDao" class="org.example.dao.impl.BookDaoImpl"/>
<bean id="bookService" class="org.example.service.impl.BookServiceImpl"/>
</beans>
- 在org.example下新建一個(gè)類Main2
public class Main2 {
public static void main(String[] args) {
//3.獲取IoC容器
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
//4.獲取bean(根據(jù)bean配置id獲?。?/span>
//左邊是對(duì)象,右邊是接口,所以要強(qiáng)轉(zhuǎn)類型
BookDao bookDao = (BookDao) ctx.getBean("bookDao");
bookDao.save();
BookService bookService = (BookService) ctx.getBean("bookService");
bookService.save();
}
}
- 程序運(yùn)行結(jié)果(通過(guò)spring創(chuàng)建對(duì)象而不是通過(guò)new創(chuàng)建對(duì)象)
- 總結(jié) :spring程序的開(kāi)發(fā)步驟
3.DI入門案例
- 刪除BookServiceImpl類中通過(guò)new方式創(chuàng)建對(duì)象的代碼,并提供對(duì)應(yīng)的setter方法
package org.example.service.impl;
import org.example.dao.BookDao;
import org.example.service.BookService;
public class BookServiceImpl implements BookService {
//5.刪除業(yè)務(wù)層中使用new的方式創(chuàng)建的dao對(duì)象
private BookDao bookDao;
// private BookDao bookDao = new BookDaoImpl();
public void save() {
System.out.println("book service save ...");
bookDao.save();
}
// 6.提供對(duì)應(yīng)的set方法
public void setBookDao(BookDao bookDao) {
this.bookDao = bookDao;
}
}
- 在全局配置文件applicationContext.xml文件中將BookDao注入到BookService中
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--1.導(dǎo)入spring的坐標(biāo)spring-context,對(duì)應(yīng)版本是5.2.10.RELEASE-->
<!--2.配置bean-->
<!--bean標(biāo)簽標(biāo)示配置bean
id屬性標(biāo)示給bean起名字
class屬性表示給bean定義類型-->
<bean id="bookDao" class="org.example.dao.impl.BookDaoImpl"/>
<bean id="bookService" class="org.example.service.impl.BookServiceImpl">
<!--7.配置server與dao的關(guān)系-->
<!--property標(biāo)簽表示配置當(dāng)前bean的屬性
name屬性表示配置哪一個(gè)具體的屬性
ref屬性表示參照哪一個(gè)bean-->
<property name="bookDao" ref="bookDao"/>
</bean>
</beans>
- 運(yùn)行結(jié)果
- 注意事項(xiàng)
name 的值是類的屬性值,ref的值是id值
4.bean的配置
- bean的基礎(chǔ)配置
- bean的別名設(shè)置
- 控制bean的作用范圍
5.IOC容器相關(guān)
- 創(chuàng)建容器
- 獲取bean的方式
- 容器類層次結(jié)構(gòu)
(BeanFactory接口創(chuàng)建完畢后,所有的bean均為延遲加載)
三、數(shù)據(jù)源對(duì)象管理
1. 數(shù)據(jù)源對(duì)象管理入門案例
1. 導(dǎo)入數(shù)據(jù)源坐標(biāo)(以druid數(shù)據(jù)源為例)
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.16</version>
</dependency>
2. 在核心配置文件中配置管理數(shù)據(jù)源對(duì)象(由于第三方技術(shù)已經(jīng)寫好,注入方式以及具體屬性名需要查)
<bean class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/spring_db"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</bean>
3. 創(chuàng)建編寫模擬配置類App及其運(yùn)行結(jié)果
public class App {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
DataSource dataSource = (DataSource) ctx.getBean("dataSource");
System.out.println(dataSource);
}
}
2. 加載properties配置文件
1. 在resources目錄下創(chuàng)建jdbc.properties文件
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/spring_db
jdbc.username=root
jdbc.password=root
2. 在核心配置類中開(kāi)啟context命名空間
3. 使用context空間加載properties文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
">
<!-- 1.開(kāi)啟context命名空間-->
<!-- 2.使用context空間加載properties文件-->
<!-- 屬性占位符,location:加載的文件-->
<context:property-placeholder location="jdbc.properties" system-properties-mode="NEVER"/>
<!-- 3.使用屬性占位符${}讀取properties文件中的屬性-->
<!-- 說(shuō)明:idea自動(dòng)識(shí)別${}加載的屬性值,需要手工點(diǎn)擊才可以查閱原始書寫格式-->
<bean class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<bean id="bookDao" class="org.example.dao.impl.BookDaoImpl">
<property name="name" value="${jdbc.driver}"/>
</bean>
</beans>
4. 將綁定好的properties屬性注入到bookdao中,通過(guò)bookdao中的save方法輸出
public interface BookDao {
public void save();
}
public class BookDaoImpl implements BookDao {
private String name;
public void setName(String name) {
this.name = name;
}
public void save() {
System.out.println("book dao save ..." + name);
}
}
5. 模擬測(cè)試類及輸出結(jié)果
6. 小結(jié)和拓展
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-456334.html
總結(jié)
歡迎各位留言交流以及批評(píng)指正,如果文章對(duì)您有幫助或者覺(jué)得作者寫的還不錯(cuò)可以點(diǎn)一下關(guān)注,點(diǎn)贊,收藏支持一下。
(博客的參考源碼可以在我主頁(yè)的資源里找到,如果在學(xué)習(xí)的過(guò)程中有什么疑問(wèn)歡迎大家在評(píng)論區(qū)向我提出)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-456334.html
到了這里,關(guān)于初識(shí)Spring -- Spring入門保姆級(jí)教程(一)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!