轉(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)用
標(biāo)準(zhǔn)的Maven工程置尔,對(duì)Maven不熟悉的可以先簡單了解一下Maven
i. 運(yùn)行工程
查看App.java 發(fā)現(xiàn)有個(gè)Main函數(shù)杠步,不妨就運(yùn)行一下他!
執(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è)概念:
- Spring Context是一個(gè)對(duì)象工廠(可以這么簡單的認(rèn)為)
- 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è)依賴
- spring-context (Spring 上下文)
v. 總結(jié)
項(xiàng)目當(dāng)前總共四個(gè)文件剖效,除去maven工程的pom.xml 剩余三個(gè)文件嫉入;
調(diào)用過程如下
-
App.java
中有Main函數(shù),程序從這里開始執(zhí)行 - Main函數(shù)第一行代碼創(chuàng)建了一個(gè)對(duì)象工廠(SpringContext)配置文件是
root-context.xml
-
root-context.xml
中定義了一個(gè)對(duì)象(也叫JavaBean)對(duì)象來源于AccountService類 - AccountService類在
AccountService.java
中定義璧尸,只有一個(gè)sayHello函數(shù) - Main函數(shù)中調(diào)用
ClassPathXmlApplicationContext
對(duì)象的getBean
方法獲取了root-context.xml
中定義個(gè)AccountService對(duì)象 - 調(diào)用AccountService中的sayHello方法
而這個(gè)過程咒林,也就是很多人說的控制反轉(zhuǎn)(IoC),也就是Spring的核心逗宁!