Java框架之spring(一)


小伙伴們

我們要學(xué)習(xí)框架

準(zhǔn)備好了嗎?

那我們開始了

MVC


M (model) 模型 是應(yīng)用程序中用于處理程序數(shù)據(jù)邏輯的部分。(jdbc,hibernate,mybatis,spring-JdbcTemplate)通常模型對(duì)象負(fù)責(zé)在數(shù)據(jù)庫(kù)中存儲(chǔ)數(shù)據(jù)。


C (controller) 控制器 是應(yīng)用程序中處理用戶交互的部分(servlet,?Struts1, Struts2, springMVC)通??刂破髫?fù)責(zé)從視圖讀取數(shù)據(jù),控制用戶輸入,并向模型發(fā)送數(shù)據(jù)。


V (view) 視圖 是應(yīng)用程序中處理數(shù)據(jù)顯示的部分(HTML, jsp, freemarker, velocity) 視圖是依據(jù)模型數(shù)據(jù)創(chuàng)建的


其實(shí)在 MVC 概念形成之前還經(jīng)歷了兩種模型,我們稱之為:

model1 (jsp+javabean) 純jsp開發(fā)模式

將視圖層和控制層混在一起,但將模型層脫離出來(lái),這也是為什么在 jsp 中有那么多的其他標(biāo)簽的原因。


model2 (jsp+servlet+javabean) 簡(jiǎn)單的MVC模式

jsp 主要是用于視圖層 servlet 用于控制層 javabean 用于模型層。


了解玩這些歷史之后,有助于你們和那些工作年限久一點(diǎn)的程序員交流呦!

Spring


Spring 是一個(gè)輕量級(jí)的控制反轉(zhuǎn) (IOC) 和面向切面 (AOP) 的容器框架


控制反轉(zhuǎn) IOC ?(inversion of controller)

IOC 是一種概念,是把我們程序中類與類之間的依賴關(guān)系交給容器去處理,一般有兩種方式


依賴查找 DL (dependency lookup)

程序提供查找方式,交給容器去查找(回調(diào)函數(shù))


依賴注入DI (dependency injection)

程序不提供查找方式,提供合適的構(gòu)造方法或者setter方法,讓容器進(jìn)行注入來(lái)解決依賴關(guān)系


spring的控制反轉(zhuǎn)就是通過(guò)依賴注入來(lái)實(shí)現(xiàn)?


我們來(lái)做一個(gè)例子


新建一個(gè) Java 工程,按照分層開發(fā)的模式,先來(lái)創(chuàng)建三個(gè)包?action 控制器層,service業(yè)務(wù)邏輯層 和?DAO數(shù)據(jù)層。




先來(lái)寫一個(gè)DAO接口。



寫一個(gè)類實(shí)現(xiàn)這個(gè)接口



這個(gè)地方應(yīng)該寫調(diào)用數(shù)據(jù)的方法的,我們直接返回 true 表示我們利用 jdbc 通過(guò)了數(shù)據(jù)庫(kù)的驗(yàn)證!



前端頁(yè)面獲取到 用戶名和密碼 會(huì)傳到 action 層,然后 action 層來(lái)調(diào)用service 層,service 層在來(lái)調(diào)用 DAO 層操作數(shù)據(jù)庫(kù)。現(xiàn)在DAO 層寫完了,再來(lái)寫 service 層。為了方便我們就假設(shè)從 action 拿到的用戶名和密碼都是aaa。



這邊引入一個(gè)概念—依賴:簡(jiǎn)單的說(shuō),一個(gè)類實(shí)現(xiàn)某個(gè)功能需要依靠另外一個(gè)類的幫助來(lái)實(shí)現(xiàn),就像 UserService 必須依賴于 Dao 方法才能實(shí)現(xiàn)功能


現(xiàn)在假設(shè)我們不想用 jdbc ,想用其他的方法了!( 如hibernate,mybatis) 我們?cè)撛趺崔k?創(chuàng)建一個(gè)other實(shí)現(xiàn)方法來(lái)實(shí)現(xiàn)我們的接口



修改一下我們的代碼




雖然修改代碼是可以實(shí)我們的想法,但是并不是很好。當(dāng)一個(gè)方法有多個(gè)實(shí)現(xiàn)的情況下,我們一般是基于接口的方式進(jìn)行編程


演示一下


利用構(gòu)造方法來(lái)實(shí)現(xiàn)這個(gè)操作




這下看起來(lái)是好一點(diǎn)了,但是還是有一個(gè)問(wèn)題呀??!每換一次方法都要改一下代碼。現(xiàn)在只是一個(gè)小功能,還好一點(diǎn)。以后功能多了呢!改代碼都要改半個(gè)月!


進(jìn)入 spring


spring 的下載地址:http://repo.spring.io/release/org/springframework/spring/


Spring 的 IOC 容器通過(guò)依賴注入來(lái)實(shí)現(xiàn)程序之間的依賴關(guān)系,達(dá)到解耦的作用

依賴注入是指一個(gè)對(duì)象需要另外一個(gè)對(duì)象時(shí),無(wú)需在代碼中創(chuàng)建被調(diào)用者,而是依賴于外部容器,由外部容器創(chuàng)建后傳遞給程序。


spring項(xiàng)目環(huán)境搭建需要的jar包

spring-beans-4.2.1.RELEASE.jar

spring-context-4.2.1.RELEASE.jar

spring-core-4.2.1.RELEASE.jar

spring-expression-4.2.1.RELEASE.jar


剩下幾個(gè)是 log4j 和 JUnit 的包


配置文件 applicationContext.xml,加上 bean 約束?

bean 的約束在 spring-framework-4.2.1.RELEASE\docs\spring-framework-reference\html\xsd-configuration.html 文件查看



在配置文件中定義我們的類



在 spring 實(shí)現(xiàn)依賴注入有兩種方式


通過(guò)構(gòu)造方法的方式注入:

被依賴的類必須有構(gòu)造方法

在配置文件里面來(lái)描述依賴關(guān)系



測(cè)試一下



想用其他的方法的時(shí)候,就把上面的注掉,就像下面這樣



我們測(cè)試一下



通過(guò) setter 方法注入

被依賴的類里面生成依賴類的setter方法



在配置文件來(lái)描述依賴關(guān)系




換一下




今天的 spring 就先寫到這里

再見(jiàn)了

拜拜!


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,697評(píng)論 19 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,290評(píng)論 6 342
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚_t_閱讀 34,853評(píng)論 18 399
  • 文章作者:Tyan博客:noahsnail.com 2.Introduction to the Spring Fr...
    SnailTyan閱讀 5,543評(píng)論 7 56
  • 本文內(nèi)容版權(quán)歸表態(tài)網(wǎng)所有,未經(jīng)許可,不得轉(zhuǎn)載 * 張帆(新浪微博:@張-帆上海) 私營(yíng)企業(yè)主,廣告界精英,鐘表玩家...
    78264e69c901閱讀 1,315評(píng)論 0 2

友情鏈接更多精彩內(nèi)容