01 走進(jìn)Spring挤安,Context、Bean和IoC

轉(zhuǎn)載請(qǐng)注明來源 賴賴的博客

導(dǎo)語

實(shí)踐是檢驗(yàn)真理的唯一標(biāo)準(zhǔn)丧鸯。

想了很久不知道怎么開頭,但是為了寫博客這個(gè)動(dòng)機(jī)可以一直保持下去嫩絮,還是下定決心從頭搭建一個(gè)工程開始丛肢。

一、搭建應(yīng)用前準(zhǔn)備(可先看后面的剿干,再回來搞環(huán)境)

需要具備的知識(shí)

重復(fù)一下上一節(jié)有講到的基礎(chǔ):

1. 了解java語言(推薦 java編程思想)
2. 了解MAVEN (推薦 MAVEN實(shí)戰(zhàn))

代碼工程(版本Log將會(huì)注明每一個(gè)版本對(duì)應(yīng)的課程)

https://github.com/laiyijie/SpringLearning

環(huán)境(IDE)

Spring公司推出的集成IDE工具Spring Tool Suite 版本為3.8.2

導(dǎo)入Maven工程(MAVEN基本使用蜂怎,不贅述)

1. git clone 主干版本到本地
2. 打開STS
3. file>import>Exist Maven Project
4. 選擇clone下來的文件夾
5. 稍等片刻

二、第一個(gè)Spring應(yīng)用

工程文件結(jié)構(gòu)

標(biāo)準(zhǔn)的Maven工程置尔,對(duì)Maven不熟悉的可以先簡單了解一下Maven

i. 運(yùn)行工程

查看App.java 發(fā)現(xiàn)有個(gè)Main函數(shù)杠步,不妨就運(yùn)行一下他!

執(zhí)行結(jié)果:

執(zhí)行結(jié)果

漂亮榜轿! 不是 hello world幽歼,是hello!

好了谬盐,就從Main函數(shù)切入甸私,查看Spring是如何運(yùn)行的!

ii. App.java

package me.laiyijie.demo;

import org.springframework.context.support.ClassPathXmlApplicationContext;
import me.laiyijie.demo.service.AccountService;

/**
 * Hello
 *
 */
public class App {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("root-context.xml");

        AccountService accountService = context.getBean(AccountService.class);

        System.out.println(accountService.sayHello());

        context.close();
    }
}

只有四行代碼飞傀,我相信你有耐心看完皇型。

第一行代碼

ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("root-context.xml");

我們創(chuàng)建了一個(gè)對(duì)象,這個(gè)類的名稱叫做ClassPathXmlApplicationContext 它載入了一個(gè)名字為root-context.xml的文件

而這個(gè)文件正是Spring的配置文件砸烦,他配置了一個(gè)ClassPathXmlApplicationContext對(duì)象弃鸦,高級(jí)一點(diǎn)兒的說法就是,Spring的上下文環(huán)境(術(shù)語太厲害往往聽不懂)

那這個(gè)環(huán)境到底有什么用呢幢痘?請(qǐng)看第二行代碼

第二行代碼

AccountService accountService = context.getBean(AccountService.class);

注意唬格!我們使用了ClassPathXmlApplicationContext中的一個(gè)getBean方法,并獲取了一個(gè)AccountService對(duì)象雪隧!

ClassPathXmlApplicationContext 的功能一目了然N餍!就是一個(gè)對(duì)象工廠嘛脑沿,里面保存了一些對(duì)象藕畔!

是的,你沒有看錯(cuò)庄拇,Spring的上下文工具就是一個(gè)工廠注服,一個(gè)保存對(duì)象的工廠韭邓,你需要的時(shí)候就用getBean方法從工程里面取就好了!

而這個(gè)對(duì)象我們就叫他 JavaBean

第二行代碼讀完溶弟,我們就明白了兩個(gè)概念:

  1. Spring Context是一個(gè)對(duì)象工廠(可以這么簡單的認(rèn)為)
  2. Java Bean 就是工廠里面的一個(gè)對(duì)象女淑!

第三第四行代碼

  • 調(diào)用了AccountService里面的一個(gè)方法
  • 關(guān)閉了對(duì)象工廠

iii. 在SpringContext配置文件中配置一個(gè)JavaBean(對(duì)象)

AccountService是咱們自己寫的一個(gè)類,很簡單辜御,就只有一個(gè)方法鸭你,sayHello,并且返回一個(gè)"hello"字符串

AccountService.java

package me.laiyijie.demo.service;

public class AccountService {

    public String sayHello() {

        return "hello";
    }
}

在Main函數(shù)中沒有new過這個(gè)對(duì)象擒权,也就是說這個(gè)對(duì)象的創(chuàng)建并不是由我們自己創(chuàng)建袱巨,而是通過ClassPathXmlApplicationContext進(jìn)行創(chuàng)建,而ClassPathXmlApplicationContext中包含什么對(duì)象碳抄,是通過 root-context.xml 來確認(rèn)的

root-context.xml

<?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-4.3.xsd">

    <bean class="me.laiyijie.demo.service.AccountService"></bean>

</beans>

忽略頭部看重點(diǎn)

<bean class="me.laiyijie.demo.service.AccountService"></bean>

語意很明顯: 我要定義一個(gè)bean愉老,這個(gè)bean是 me.laiyijie.demo.service.AccountService 這個(gè)類創(chuàng)建的實(shí)例;

人話: 創(chuàng)建一個(gè)AccountService的對(duì)象

iv. Maven的環(huán)境依賴是pom.xml代碼如下

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>me.laiyijie</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <dependencies>
    
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.3.2.RELEASE</version>
        </dependency>

    </dependencies>
</project>

此處只引入了一個(gè)依賴

  1. spring-context (Spring 上下文)

v. 總結(jié)

項(xiàng)目當(dāng)前總共四個(gè)文件剖效,除去maven工程的pom.xml 剩余三個(gè)文件嫉入;

調(diào)用過程如下

  1. App.java中有Main函數(shù),程序從這里開始執(zhí)行
  2. Main函數(shù)第一行代碼創(chuàng)建了一個(gè)對(duì)象工廠(SpringContext)配置文件是root-context.xml
  3. root-context.xml中定義了一個(gè)對(duì)象(也叫JavaBean)對(duì)象來源于AccountService類
  4. AccountService類在AccountService.java中定義璧尸,只有一個(gè)sayHello函數(shù)
  5. Main函數(shù)中調(diào)用ClassPathXmlApplicationContext對(duì)象的getBean方法獲取了root-context.xml中定義個(gè)AccountService對(duì)象
  6. 調(diào)用AccountService中的sayHello方法

而這個(gè)過程咒林,也就是很多人說的控制反轉(zhuǎn)(IoC),也就是Spring的核心逗宁!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末映九,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子瞎颗,更是在濱河造成了極大的恐慌件甥,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,110評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件哼拔,死亡現(xiàn)場(chǎng)離奇詭異引有,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)倦逐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門譬正,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人檬姥,你說我怎么就攤上這事曾我。” “怎么了健民?”我有些...
    開封第一講書人閱讀 165,474評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵抒巢,是天一觀的道長。 經(jīng)常有香客問我秉犹,道長蛉谜,這世上最難降的妖魔是什么稚晚? 我笑而不...
    開封第一講書人閱讀 58,881評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮型诚,結(jié)果婚禮上客燕,老公的妹妹穿的比我還像新娘。我一直安慰自己狰贯,他們只是感情好也搓,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著涵紊,像睡著了一般还绘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上栖袋,一...
    開封第一講書人閱讀 51,698評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音抚太,去河邊找鬼塘幅。 笑死,一個(gè)胖子當(dāng)著我的面吹牛尿贫,可吹牛的內(nèi)容都是我干的电媳。 我是一名探鬼主播,決...
    沈念sama閱讀 40,418評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼庆亡,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼匾乓!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起又谋,我...
    開封第一講書人閱讀 39,332評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤拼缝,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后彰亥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體咧七,經(jīng)...
    沈念sama閱讀 45,796評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評(píng)論 3 337
  • 正文 我和宋清朗相戀三年任斋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了继阻。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,110評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡废酷,死狀恐怖瘟檩,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情澈蟆,我是刑警寧澤墨辛,帶...
    沈念sama閱讀 35,792評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站丰介,受9級(jí)特大地震影響背蟆,放射性物質(zhì)發(fā)生泄漏鉴分。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評(píng)論 3 331
  • 文/蒙蒙 一带膀、第九天 我趴在偏房一處隱蔽的房頂上張望志珍。 院中可真熱鬧,春花似錦垛叨、人聲如沸伦糯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽敛纲。三九已至,卻和暖如春剂癌,著一層夾襖步出監(jiān)牢的瞬間淤翔,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評(píng)論 1 272
  • 我被黑心中介騙來泰國打工佩谷, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留旁壮,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,348評(píng)論 3 373
  • 正文 我出身青樓谐檀,卻偏偏與公主長得像抡谐,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子桐猬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理麦撵,服務(wù)發(fā)現(xiàn),斷路器溃肪,智...
    卡卡羅2017閱讀 134,662評(píng)論 18 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,823評(píng)論 6 342
  • 文章作者:Tyan博客:noahsnail.com 2.Introduction to the Spring Fr...
    SnailTyan閱讀 5,390評(píng)論 7 56
  • 來源:關(guān)于Spring IOC (DI-依賴注入)你需要知道的一切作者:zejian Dao層(AccountDa...
    楊井閱讀 5,336評(píng)論 0 27
  • 錨定 匹配字符串的第一個(gè)單詞(或字母) 匹配字符串最后一個(gè)單詞 匹配包含某字母 匹配某字母開頭的單詞 匹配某字母結(jié)...
    SingleDiego閱讀 665評(píng)論 0 0