javascript
Spring-day01
一、Git的基本使用
1、創(chuàng)建倉(cāng)庫(kù)
在注冊(cè)完成并成功登錄 Gitee 賬號(hào)后,用戶(hù)可以開(kāi)始創(chuàng)建自己的第一個(gè)倉(cāng)庫(kù)。
- 1、通過(guò)網(wǎng)站右上角的「+」號(hào),選擇「新建倉(cāng)庫(kù)」,進(jìn)入新建倉(cāng)庫(kù)頁(yè)面
- 2、在新建倉(cāng)庫(kù)頁(yè)面填寫(xiě)倉(cāng)庫(kù)信息。倉(cāng)庫(kù)相關(guān)概念說(shuō)明如下:
- 倉(cāng)庫(kù)名稱(chēng): 倉(cāng)庫(kù)的名稱(chēng),用于倉(cāng)庫(kù)命名
- 歸屬:倉(cāng)庫(kù)歸屬賬戶(hù),可以是個(gè)人賬號(hào)/組織/企業(yè)中的一種,創(chuàng)建成功后該賬戶(hù)默認(rèn)為倉(cāng)庫(kù)的擁有者(管理員)
- 路徑:倉(cāng)庫(kù)的git訪問(wèn)路徑,由用戶(hù)個(gè)性地址+倉(cāng)庫(kù)路徑名稱(chēng)組成。創(chuàng)建倉(cāng)庫(kù)后用戶(hù)將通過(guò)該路徑訪問(wèn)倉(cāng)庫(kù)。
- 倉(cāng)庫(kù)介紹:倉(cāng)庫(kù)的簡(jiǎn)單介紹
- 是否開(kāi)源:設(shè)置倉(cāng)庫(kù)是否為公開(kāi)倉(cāng)庫(kù),公開(kāi)倉(cāng)庫(kù)對(duì)所有人可見(jiàn),私有倉(cāng)庫(kù)僅限倉(cāng)庫(kù)成員可見(jiàn)。
- 選擇語(yǔ)言:倉(cāng)庫(kù)主要開(kāi)發(fā)用的編程語(yǔ)言
- 添加.gitignore:系統(tǒng)默認(rèn)提供的git忽略提交的文件模板,設(shè)置.gitignore后將默認(rèn)忽略指定目錄/文件到倉(cāng)庫(kù)
- 添加開(kāi)源許可證:如果倉(cāng)庫(kù)為公開(kāi)倉(cāng)庫(kù),可以添加設(shè)置倉(cāng)庫(kù)的開(kāi)源協(xié)議,作為對(duì)當(dāng)前項(xiàng)目倉(cāng)庫(kù)和衍生項(xiàng)目倉(cāng)庫(kù)許可約束,開(kāi)源許可證決定了該開(kāi)源項(xiàng)目是否對(duì)商業(yè)友好。
- Readme:項(xiàng)目倉(cāng)庫(kù)自述文檔,通常包含有軟件的描述或使用的注意事項(xiàng)。
- 使用\**\*模板文件初始化倉(cāng)庫(kù):使用Issue或Pull Request文件模板初始化倉(cāng)庫(kù)
- 3、點(diǎn)擊「創(chuàng)建」,即可在Gitee上創(chuàng)建你的第一個(gè)倉(cāng)庫(kù)。
2、提交第一行代碼
在創(chuàng)建完倉(cāng)庫(kù)之后,用戶(hù)可以通過(guò)如下方式,可以向倉(cāng)庫(kù)提交第一行代碼。
此處我們以用戶(hù)賬號(hào)下命名為 HelloGitee 的倉(cāng)庫(kù)為例。對(duì)應(yīng)的倉(cāng)庫(kù)地址為:https://gitee.com/用戶(hù)個(gè)性地址/HelloGitee.git,在實(shí)際實(shí)踐中,你可以將用戶(hù)個(gè)性地址替換為自己的地址。
方法1、先將倉(cāng)庫(kù)clone到本地,修改后再push到 Gitee 的倉(cāng)庫(kù)
$ git clone https://gitee.com/用戶(hù)個(gè)性地址/HelloGitee.git #將遠(yuǎn)程倉(cāng)庫(kù)克隆到本地在克隆過(guò)程中,如果倉(cāng)庫(kù)是一個(gè)私有倉(cāng)庫(kù),將會(huì)要求用戶(hù)輸入 Gitee 的賬號(hào)和密碼。按照提示輸入即可。
當(dāng)然,用戶(hù)也可以通過(guò)配置本地的git配置信息,執(zhí)行g(shù)it config命令預(yù)先配置好相關(guān)的用戶(hù)信息,配置執(zhí)行如下:
$ git config --global user.name "你的名字或昵稱(chēng)" $ git config --global user.email "你的郵箱"在 Gitee 平臺(tái)中,強(qiáng)烈建議您在【設(shè)置-多郵箱管理】中的“提交郵箱”與上面配置信息中的郵箱地址保持一致,這樣平臺(tái)就能及時(shí)地統(tǒng)計(jì)您在平臺(tái)中提交代碼的貢獻(xiàn)了。
修改代碼后,在倉(cāng)庫(kù)目錄下執(zhí)行下面命令
$ git add . #將當(dāng)前目錄所有文件添加到git暫存區(qū) $ git commit -m "my first commit" #提交并備注提交信息 $ git push origin master #將本地提交推送到遠(yuǎn)程倉(cāng)庫(kù)方法2、本地初始化一個(gè)倉(cāng)庫(kù),設(shè)置遠(yuǎn)程倉(cāng)庫(kù)地址后再做push
和方法1的差別,在于先創(chuàng)建倉(cāng)庫(kù)。
$ git init $ git remote add origin https://gitee.com/用戶(hù)個(gè)性地址/HelloGitee.git這樣就完成了版本的一次初始化。
接下去,進(jìn)入你已經(jīng)初始化好的或者克隆倉(cāng)庫(kù)的目錄,然后執(zhí)行:
修改/添加文件,否則與原文件相比就沒(méi)有變動(dòng)。
$ git add . $ git commit -m "第一次提交" $ git push origin master然后如果需要賬號(hào)密碼的話就輸入賬號(hào)密碼,這樣就完成了一次提交。此時(shí),你可以在你的個(gè)人面板、倉(cāng)庫(kù)主頁(yè)查看到你的提交記錄。
在新建倉(cāng)庫(kù)時(shí),如果在 Gitee 平臺(tái)倉(cāng)庫(kù)上已經(jīng)存在 readme 或其他文件,在提交時(shí)可能會(huì)存在沖突,這時(shí)用戶(hù)需要選擇的是保留線上的文件或者舍棄線上的文件,如果您舍棄線上的文件,則在推送時(shí)選擇強(qiáng)制推送,強(qiáng)制推送需要執(zhí)行下面的命令(默認(rèn)不推薦該行為):
$ git push origin master -f如果您選擇保留線上的 readme 文件,則需要先執(zhí)行:
$ git pull origin master3、安裝客戶(hù)端
4、初始化環(huán)境
讓當(dāng)前文件夾,被git所管理起來(lái)!
命令行:在當(dāng)前文件夾下打開(kāi)git的黑窗口!
git init使用TortoiseGit可視化菜單工具來(lái)操作,Git在這里創(chuàng)建版本庫(kù)!
5、 連接遠(yuǎn)程
復(fù)制遠(yuǎn)程項(xiàng)目倉(cāng)庫(kù)的url(自己的倉(cāng)庫(kù))!
在本地設(shè)置中,配置遠(yuǎn)程地址!
點(diǎn)擊添加,然后點(diǎn)擊確定。
如果在第一次拉取的時(shí)候,本地有文件,一定要pull拉取后,選擇合并歷史相關(guān)版本。
另外一個(gè)操作是,直接克隆項(xiàng)目!
6、常規(guī)操作
二、面向?qū)ο?/h2>
思想:
Java語(yǔ)言是面向?qū)ο?#xff0c;就是強(qiáng)調(diào)對(duì)象,比如說(shuō)我們要做一個(gè)大型的項(xiàng)目,但是呢,做這個(gè)項(xiàng)目需要?jiǎng)澐謳讉€(gè)功能塊(方法),這幾個(gè)功能塊組合在一起就形成了這個(gè)項(xiàng)目,但是,我們換了一種思想,我們找一個(gè)對(duì)象,該對(duì)象具備這幾個(gè)功能,那我們只需要重點(diǎn)關(guān)注這一個(gè)對(duì)象就可以了。
封裝、繼承、多態(tài)、抽象!
1、封裝
提高代碼復(fù)用性!!!!
隱藏具體實(shí)現(xiàn)、開(kāi)放少量接口!
訪問(wèn)修飾符:隱藏private!
類(lèi)似:現(xiàn)實(shí)中的空調(diào)、汽車(chē)、電腦。
2、繼承
擴(kuò)展!
開(kāi)閉原則:對(duì)擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉。
可以寫(xiě)子類(lèi)擴(kuò)展父類(lèi),但是不能去直接修改父類(lèi)。類(lèi)似:jdk版本向下兼容。屎山!
3、多態(tài)
一個(gè)物種的多種表現(xiàn)形態(tài)。
類(lèi)似:人 美國(guó)人 中國(guó)人 日本小矮子!
4、抽象
對(duì)大家都具有的具體行為的提取
明明有了抽象,為什么還需要接口?
java是單繼承!但是可以實(shí)現(xiàn)多個(gè)接口!接口中都是抽象方法,具體抽象功能(規(guī)范)!
企業(yè)中比較常見(jiàn)的行為:面向接口開(kāi)發(fā)!
三、IO
輸入流(Inputstream):磁盤(pán)到內(nèi)存。
輸出流(Outputstream):內(nèi)存到磁盤(pán)。
序列化:對(duì)象 轉(zhuǎn)換成 字節(jié)流(字節(jié)碼文件)! 一堆各種屬性方法,把它們壓縮到一個(gè)二進(jìn)制文件中,方便存儲(chǔ)和傳輸。
類(lèi)似:搬家!呼叫貨拉拉!自己封裝排列家具和物品的行為叫做序列化!
反序列化:
類(lèi)似:從貨拉拉上卸貨,并拆開(kāi)布置到新家的對(duì)應(yīng)位置上。
四、沒(méi)有Spring的時(shí)候我們?cè)撛趺磳?shí)現(xiàn)Spring
1. 耦合度
非它不可!沒(méi)有它就不能進(jìn)行下一步任務(wù)操作
強(qiáng)耦合代碼:
class A{}public class B{ //非A類(lèi)不可,否則無(wú)法創(chuàng)建B類(lèi) public B(A a){ }}解決方案:使用接口解耦!
拋出一個(gè)問(wèn)題:編譯期間不依賴(lài),運(yùn)行期間才依賴(lài)!多態(tài)如何解決的這個(gè)? 接口回調(diào)方式解耦!
2. 演示demo
定義一個(gè)人類(lèi)接口,提供一個(gè)方法eat,2個(gè)實(shí)現(xiàn)類(lèi),Chinese,American!
寫(xiě)一個(gè)測(cè)試類(lèi),用多態(tài)的手段進(jìn)行調(diào)用。
口訣:父類(lèi)引用指向子類(lèi)實(shí)現(xiàn)!
測(cè)試類(lèi):
package com.woniuxy.test; import com.woniuxy.entity.Person; import com.woniuxy.entity.impl.American; import com.woniuxy.entity.impl.Chinese;public class Test {public static void main(String[] args) {Person person = new American();person.eat();} }3. 使用反射解耦
3.1 反射創(chuàng)建對(duì)象的方法
Class.forName(“全限定類(lèi)名”);
類(lèi)名.class
對(duì)象.getClass()
3.2 測(cè)試類(lèi)使用配置文件解耦
package com.woniuxy.test; import com.woniuxy.entity.Person; import java.io.InputStream; import java.util.Properties;public class Test1 {public static void main(String[] args) throws Exception {//平時(shí)寫(xiě)代碼的時(shí)候,不可能只有一個(gè)地方new這個(gè)對(duì)象!//現(xiàn)在需要改變的只有一個(gè)東西,字符串!這個(gè)字符串可以從配置文件中讀取!//怎么讀取配置文件?Properties properties = new Properties();//需要一個(gè)輸入流InputStream inputStream = Test1.class.getResourceAsStream("person.properties");//讀取輸入流,轉(zhuǎn)換成對(duì)象信息,并封裝到Properties對(duì)象中properties.load(inputStream);//properties這個(gè)對(duì)象中,有沒(méi)有辦法獲取到文件流中的內(nèi)容?通過(guò)key獲取全限定類(lèi)名String str = properties.getProperty("person");Person person = (Person) Class.forName(str).newInstance();person.eat();} }這種寫(xiě)法會(huì)面臨一個(gè)問(wèn)題:
就是每個(gè)測(cè)試類(lèi),都要寫(xiě)一遍這個(gè)讀取配置文件的方法!
解決方案:利用封裝思想!封裝為一個(gè)工具類(lèi),在java中,某個(gè)工具類(lèi)是用來(lái)創(chuàng)建對(duì)象的,那么這個(gè)工具類(lèi),通常使用的是工廠設(shè)計(jì)模式!通過(guò)工廠制造對(duì)象!
4.工廠模式解耦
spring底層,就是使用的工廠模式創(chuàng)建對(duì)象!
4.1 第一個(gè)工廠模式
package com.woniuxy.factorys; import com.woniuxy.entity.Person; import com.woniuxy.test.Test; import java.io.IOException; import java.io.InputStream; import java.util.Properties;public class PersonFactory {//直接通過(guò)配置文件創(chuàng)建對(duì)象,不手動(dòng)指定具體對(duì)象是誰(shuí)!public static Person makePerson(){//怎么讀取配置文件?Properties properties = new Properties();//需要一個(gè)輸入流InputStream inputStream = Test.class.getResourceAsStream("../test/person.properties");Person person = null;try {properties.load(inputStream);//properties這個(gè)對(duì)象中,有沒(méi)有辦法獲取到文件流中的內(nèi)容?通過(guò)key獲取全限定類(lèi)名String str = properties.getProperty("person");person = (Person) Class.forName(str).newInstance();} catch (IOException | ClassNotFoundException | InstantiationException | IllegalAccessException e) {e.printStackTrace();}return person;} }解決了代碼重復(fù)性過(guò)高的問(wèn)題!
但是,同時(shí)又出現(xiàn)了一個(gè)問(wèn)題就是它只能制造同一個(gè)類(lèi)的對(duì)象,無(wú)法全部創(chuàng)建出來(lái),不能想用哪個(gè)自己去用!
4.2 模擬spring底層的工廠
讀取配置文件的時(shí)候不創(chuàng)建對(duì)象,在用的時(shí)候創(chuàng)建!
package com.woniuxy.factorys; import com.woniuxy.entity.Person; import com.woniuxy.test.Test; import java.io.IOException; import java.io.InputStream; import java.util.HashMap; import java.util.Map; import java.util.Properties; import java.util.Set;public class MyBeanFactory {//在讀取配置文件后,我需要存儲(chǔ)文件中的全限定類(lèi)名private static Map<String,String> map = new HashMap();//static{//怎么讀取配置文件?Properties properties = new Properties();//需要一個(gè)輸入流InputStream inputStream = Test.class.getResourceAsStream("../test/person.properties");Person person = null;try {properties.load(inputStream);//獲取了所有的key?還是valueSet<String> keys = properties.stringPropertyNames();for (String name:keys) {String property = properties.getProperty(name);map.put(name,property);}} catch (IOException e) {e.printStackTrace();}}public Object getBean(String name){//只是獲取的全限定類(lèi)名String value = map.get(name);try {return Class.forName(value).newInstance();} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();}return null;} }對(duì)象是單例(singleton)還是原型(prototype)?
原型模式,每次都會(huì)基于原型(class)創(chuàng)建新的對(duì)象!
nstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return null;
}
}
總結(jié)
以上是生活随笔為你收集整理的Spring-day01的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 区块链技术的应用在数字藏品上的体现
- 下一篇: 算法——动态规划2