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