一篇文章學會Spring4.0
spring概述
Spring 是一個開源框架.
Spring 為簡化企業級應用開發而生. 使用 Spring 可以使簡單的 JavaBean 實現以前只有 EJB 才能實現的功能.
Spring 是一個 IOC(DI) 和 AOP 容器框架.
具體描述 Spring:
輕量級:Spring 是非侵入性的 - 基於 Spring 開發的應用中的物件可以不依賴於 Spring 的 API
依賴注入(DI — dependency injection、IOC)
面向切面程式設計(AOP — aspect oriented programming)
容器: Spring 是一個容器, 因為它包含並且管理應用物件的生命週期
框架: Spring 實現了使用簡單的元件配置組合成一個複雜的應用. 在 Spring 中可以使用 XML 和 Java 註解組合這些物件
一站式:在 IOC 和 AOP 的基礎上可以整合各種企業應用的開源框架和優秀的第三方類庫 (實際上 Spring 自身也提供了展現層的 SpringMVC 和 持久層的 Spring JDBC)
spring模組
搭建 Spring 開發環境
Spring 的配置檔案:
一個典型的 Spring 專案需要建立一個或多個 Bean 配置檔案, 這些配置檔案用於在 Spring IOC 容器裡配置 Bean. Bean 的配置檔案可以放在 classpath 下, 也可以放在其它目錄下.
MAVEN配置增加(因為要設計到資料庫操作,所以一塊兒放進來)
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId >
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency >
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.7.4</version>
</dependency>
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.35</version>
</dependency>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
IOC 和 DI
IOC(Inversion of Control):其思想是反轉資源獲取的方向. 傳統的資源查詢方式要求元件向容器發起請求查詢資源. 作為迴應, 容器適時的返回資源. 而應用了 IOC 之後, 則是容器主動地將資源推送給它所管理的元件, 元件所要做的僅是選擇一種合適的方式來接受資源. 這種行為也被稱為查詢的被動形式
DI(Dependency Injection) — IOC 的另一種表述方式:即元件以一些預先定義好的方式(例如: setter 方法)接受來自如容器的資源注入. 相對於 IOC 而言,這種表述更直接
IOC 前生 — 分離介面與實現
需求: 生成 HTML 或 PDF 格式的不同型別的報表
IOC 前生 — 採用工廠設計模式
IOC — 採用反轉控制
Spring 容器
在 Spring IOC 容器讀取 Bean 配置建立 Bean 例項之前, 必須對它進行例項化. 只有在容器例項化後, 才可以從 IOC 容器裡獲取 Bean 例項並使用.
Spring 提供了兩種型別的 IOC 容器實現.
BeanFactory: IOC 容器的基本實現.
ApplicationContext: 提供了更多的高階特性. 是 BeanFactory 的子介面.
BeanFactory 是 Spring 框架的基礎設施,面向 Spring 本身;ApplicationContext 面向使用 Spring 框架的開發者,幾乎所有的應用場合都直接使用 ApplicationContext 而非底層的 BeanFactory
無論使用何種方式, 配置檔案時相同的.
ApplicationContext
ApplicationContext 的主要實現類:
ClassPathXmlApplicationContext:從 類路徑下載入配置檔案
FileSystemXmlApplicationContext: 從檔案系統中載入配置檔案
ConfigurableApplicationContext 擴充套件於 ApplicationContext,新增加兩個主要方法:refresh() 和 close(), 讓 ApplicationContext 具有啟動、重新整理和關閉上下文的能力
ApplicationContext 在初始化上下文時就例項化所有單例的 Bean。
WebApplicationContext 是專門為 WEB 應用而準備的,它允許從相對於 WEB 根目錄的路徑中完成初始化工作
從 IOC 容器中獲取 Bean
呼叫 ApplicationContext 的 getBean() 方法
依賴注入的方式
Spring 支援 3 種依賴注入的方式
1. 屬性注入
2. 構造器注入
3. 工廠方法注入(很少使用,不推薦)
屬性注入
屬性注入即通過 setter 方法注入Bean 的屬性值或依賴的物件
屬性注入使用<property>
元素, 使用 name 屬性指定 Bean 的屬性名稱,value 屬性或<value>
子節點指定屬性值
屬性注入是實際應用中最常用的注入方式
構造方法注入
通過構造方法注入Bean 的屬性值或依賴的物件,它保證了 Bean 例項在例項化後就可以使用。
構造器注入在 <constructor-arg>
元素裡宣告屬性, <constructor-arg>
中沒有 name 屬性
按索引匹配入參:
按型別匹配入參:
注入細節
字面值
字面值:可用字串表示的值,可以通過<value>
元素標籤或 value 屬性進行注入。
基本資料型別及其封裝類、String 等型別都可以採取字面值注入的方式
若字面值中包含特殊字元,可以使用
引用其它 Bean
組成應用程式的 Bean 經常需要相互協作以完成應用程式的功能. 要使 Bean 能夠相互訪問, 就必須在 Bean 配置檔案中指定對 Bean 的引用
在 Bean 的配置檔案中, 可以通過<ref>
元素或 ref 屬性為 Bean 的屬性或構造器引數指定對 Bean 的引用.
也可以在屬性或構造器裡包含 Bean 的宣告, 這樣的 Bean 稱為內部 Bean
內部 Bean
當 Bean 例項僅僅給一個特定的屬性使用時, 可以將其宣告為內部 Bean. 內部 Bean 宣告直接包含在<property>
或 <constructor-arg>
元素裡, 不需要設定任何 id 或 name 屬性
內部 Bean 不能使用在任何其他地方
注入引數詳解:null 值和級聯屬性
可以使用專用的 <null/>
元素標籤為 Bean 的字串或其它物件型別的屬性注入 null 值
和 Struts、Hiberante 等框架一樣,Spring 支援級聯屬性的配置。
集合屬性
在 Spring中可以通過一組內建的 xml 標籤(例如:<list>, <set> 或 <map>
) 來配置集合屬性.
java.util.List
配置 java.util.List 型別的屬性, 需要指定<list>
標籤, 在標籤裡包含一些元素. 這些標籤可以通過<value>
指定簡單的常量值, 通過 <ref>
指定對其他 Bean 的引用. 通過<bean>
指定內建 Bean 定義. 通過<null/>
指定空元素. 甚至可以內嵌其他集合.
陣列的定義和 List 一樣, 都使用<list>
java.util.Set
配置 java.util.Set 需要使用<set>
標籤, 定義元素的方法與 List 一樣.
Java.util.Map
Java.util.Map 通過 <map>
標籤定義, <map>
標籤裡可以使用多個 <entry>
作為子標籤. 每個條目包含一個鍵和一個值.
必須在<key>
標籤裡定義鍵
因為鍵和值的型別沒有限制, 所以可以自由地為它們指定<value>, <ref>, <bean> 或 <null>
元素.
可以將 Map 的鍵和值作為 <entry>
的屬性定義: 簡單常量使用 key 和 value 來定義; Bean 引用通過 key-ref 和 value-ref 屬性定義
使用<props>
定義 java.util.Properties, 該標籤使用多個<prop>
作為子標籤. 每個<prop>
標籤必須定義 key 屬性.
使用 utility scheme 定義集合
使用基本的集合標籤定義集合時, 不能將集合作為獨立的 Bean 定義, 導致其他 Bean 無法引用該集合, 所以無法在不同 Bean 之間共享集合.
可以使用 util schema 裡的集合標籤定義獨立的集合 Bean. 需要注意的是, 必須在 根元素裡新增 util schema 定義
使用 p 名稱空間
為了簡化 XML 檔案的配置,越來越多的 XML 檔案採用屬性而非子元素配置資訊。
Spring 從 2.5 版本開始引入了一個新的 p 名稱空間,可以通過 <bean>
元素屬性的方式配置 Bean 的屬性。
使用 p 名稱空間後,基於 XML 的配置方式將進一步簡化
XML 配置裡的 Bean 自動裝配
Spring IOC 容器可以自動裝配 Bean. 需要做的僅僅是在 的 autowire 屬性裡指定自動裝配的模式
byType(根據型別自動裝配): 若 IOC 容器中有多個與目標 Bean 型別一致的 Bean. 在這種情況下, Spring 將無法判定哪個 Bean 最合適該屬性, 所以不能執行自動裝配.
byName(根據名稱自動裝配): 必須將目標 Bean 的名稱和屬性名設定的完全相同.
constructor(通過構造器自動裝配): 當 Bean 中存在多個構造器時, 此種自動裝配方式將會很複雜. 不推薦使用
自動裝配的缺點
在 Bean 配置檔案裡設定 autowire 屬性進行自動裝配將會裝配 Bean 的所有屬性. 然而, 若只希望裝配個別屬性時, autowire 屬性就不夠靈活了.
autowire 屬性要麼根據型別自動裝配, 要麼根據名稱自動裝配, 不能兩者兼而有之.
一般情況下,在實際的專案中很少使用自動裝配功能,因為和自動裝配功能所帶來的好處比起來,明確清晰的配置文件更有說服力一些
繼承 Bean 配置
Spring 允許繼承 bean 的配置, 被繼承的 bean 稱為父 bean. 繼承這個父 Bean 的 Bean 稱為子 Bean
子 Bean 從父 Bean 中繼承配置, 包括 Bean 的屬性配置
子 Bean 也可以覆蓋從父 Bean 繼承過來的配置
父 Bean 可以作為配置模板, 也可以作為 Bean 例項. 若只想把父 Bean 作為模板, 可以設定 的abstract 屬性為 true, 這樣 Spring 將不會例項化這個 Bean
並不是 元素裡的所有屬性都會被繼承. 比如: autowire, abstract 等.
也可以忽略父 Bean 的 class 屬性, 讓子 Bean 指定自己的類, 而共享相同的屬性配置. 但此時 abstract 必須設為 true
依賴 Bean 配置
Spring 允許使用者通過 depends-on 屬性設定 Bean 前置依賴的Bean,前置依賴的 Bean 會在本 Bean 例項化之前建立好
如果前置依賴於多個 Bean,則可以通過逗號,空格或的方式配置 Bean 的名稱
Bean 的作用域
在 Spring 中, 可以在 元素的 scope 屬性裡設定 Bean 的作用域.
預設情況下, Spring 只為每個在 IOC 容器裡宣告的 Bean 建立唯一一個例項, 整個 IOC 容器範圍內都能共享該例項:所有後續的 getBean() 呼叫和 Bean 引用都將返回這個唯一的 Bean 例項.該作用域被稱為 singleton, 它是所有 Bean 的預設作用域.
使用外部屬性檔案
在配置檔案裡配置 Bean 時, 有時需要在 Bean 的配置裡混入系統部署的細節資訊(例如: 檔案路徑, 資料來源配置資訊等). 而這些部署細節實際上需要和 Bean 配置相分離
Spring 提供了一個 PropertyPlaceholderConfigurer 的 BeanFactory 後置處理器, 這個處理器允許使用者將 Bean 配置的部分內容外移到屬性檔案中. 可以在 Bean 配置檔案裡使用形式為${var}
的變數, PropertyPlaceholderConfigurer 從屬性檔案里加載屬性, 並使用這些屬性來替換變數.
Spring 還允許在屬性檔案中使用${propName}
,以實現屬性之間的相互引用。
註冊 PropertyPlaceholderConfigurer
Spring 2.0:
Spring 2.5 之後:
可通過<context:property-placeholder>
元素簡化: <beans>
中新增 context Schema 定義
在配置檔案中加入如下配置:
Spring表示式語言:SpEL
Spring 表示式語言(簡稱SpEL):是一個支援執行時查詢和操作物件圖的強大的表示式語言。
語法類似於 EL:SpEL 使用#{…}
作為定界符,所有在大框號中的字元都將被認為是 SpEL
SpEL 為 bean 的屬性進行動態賦值提供了便利
通過 SpEL 可以實現:
1. 通過 bean 的 id 對 bean 進行引用
2. 呼叫方法以及引用物件中的屬性
3. 計算表示式的值
4. 正則表示式的匹配
SpEL:字面量
字面量的表示:
整數:<property name="count" value="#{5}"/>
小數:<property name="frequency" value="#{89.7}"/>
科學計數法:<property name="capacity" value="#{1e4}"/>
String可以使用單引號或者雙引號作為字串的定界符號:<property name=“name” value="#{'Chuck'}"/> 或 <property name='name' value='#{"Chuck"}'/>
Boolean:<property name="enabled" value="#{false}"/>
SpEL:引用 Bean、屬性和方法
- 引用其他物件:
- 引用其他物件的屬性
- 呼叫其他方法,還可以鏈式操作
- 呼叫靜態方法或靜態屬性:通過 T() 呼叫一個類的靜態方法,它將返回一個 Class Object,然後再呼叫相應的方法或屬性:
SpEL支援的運算子號
- 算數運算子:+, -, *, /, %, ^:
- 加號還可以用作字串連線:
- 比較運算子: <, >, ==, <=, >=, lt, gt, eq, le, ge
- 邏輯運算子號: and, or, not, |
- if-else 運算子:?: (ternary), ?: (Elvis)
- if-else 的變體
- 正則表示式:matches
IOC 容器中 Bean 的生命週期方法
Spring IOC 容器可以管理 Bean 的生命週期, Spring 允許在 Bean 生命週期的特定點執行定製的任務.
Spring IOC 容器對 Bean 的生命週期進行管理的過程:
1. 通過構造器或工廠方法建立 Bean 例項
2. 為 Bean 的屬性設定值和對其他 Bean 的引用
3. 呼叫 Bean 的初始化方法
4. Bean 可以使用了
5. 當容器關閉時, 呼叫 Bean 的銷燬方法
在 Bean 的聲明裡設定 init-method 和 destroy-method 屬性, 為 Bean 指定初始化和銷燬方法.
建立 Bean 後置處理器
Bean 後置處理器允許在呼叫初始化方法前後對 Bean 進行額外的處理.
Bean 後置處理器對 IOC 容器裡的所有 Bean 例項逐一處理, 而非單一例項. 其典型應用是: 檢查 Bean 屬性的正確性或根據特定的標準更改 Bean 的屬性.
對Bean 後置處理器而言, 需要實現
介面. 在初始化方法被呼叫前後, Spring 將把每個 Bean 例項分別傳遞給上述介面的以下兩個方法:
新增 Bean 後置處理器後 Bean 的生命週期
後置處理器實現類
@Component
public class MyBeanProcesser implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println("MyBeanProcesser BeforeInitialization" + beanName);
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
System.out.println("MyBeanProcesser AfterInitialization" + beanName);
return bean;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
Spring IOC 容器對 Bean 的生命週期進行管理的過程:
1. 通過構造器或工廠方法建立 Bean 例項
2. 為 Bean 的屬性設定值和對其他 Bean 的引用
3. 將 Bean 例項傳遞給 Bean 後置處理器的 postProcessBeforeInitialization 方法
4. 呼叫 Bean 的初始化方法
5. 將 Bean 例項傳遞給 Bean 後置處理器的 postProcessAfterInitialization方法
6. Bean 可以使用了
7. 當容器關閉時, 呼叫 Bean 的銷燬方法
通過工廠建立Bean
通過呼叫靜態工廠方法建立 Bean
呼叫靜態工廠方法建立 Bean是將物件建立的過程封裝到靜態方法中. 當客戶端需要物件時, 只需要簡單地呼叫靜態方法, 而不同關心建立物件的細節.
要宣告通過靜態方法建立的 Bean, 需要在 Bean 的 class 屬性裡指定擁有該工廠的方法的類, 同時在 factory-method 屬性裡指定工廠方法的名稱. 最後, 使用<constrctor-arg>
元素為該方法傳遞方法引數.
STEP1 準備需要構造的Bean,以及靜態工廠類
public class Phone {
private int id;
private int stock;
public Phone(int id, int stock) {
this.id = id;
this.stock = stock;
}
getter setter...
@Override
public String toString() {
return "Phone{" +
"id=" + id +
", stock=" + stock +
'}';
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
/**
* 靜態工程方法,不需要例項化,直接呼叫某一個類的靜態方法就可以返回Bean的例項
*/
public class BeanStaticFactory {
private static Map<String,Object> m;
static {
if (m == null)
m = new HashMap<>();
m.put("iphone",new Phone(1,300));
m.put("nokia",new Phone(3,10));
}
public static Object getBeanByName(String beanName){
return m.get(beanName);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
STEP2 配置檔案
<!--
通過靜態工廠方法來配置Bean,注意不是配置靜態工廠方法的例項,而是配置bean的例項
class屬性 指向靜態工廠方法的全類名
factory-method 指向靜態工廠方法的方法名
如果靜態方法有引數,則通過constructor方法傳入 factory-method的引數.
-->
<bean id="phone"
class="com.iboray.spring4test.factoryBean.BeanStaticFactory"
factory-method="getBeanByName"
>
<constructor-arg value="iphone"></constructor-arg>
</bean>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
測試
ApplicationContext act = new ClassPathXmlApplicationContext("applicationContext.xml");
Phone phone = (Phone)act.getBean("phone");
System.out.println("The Phone is : "+ phone);
- 1
- 2
- 3
- 4
- 5
通過呼叫例項工廠方法建立 Bean
STEP1 準備Bean(同上)以及例項工廠
/**
* 例項工廠方法
*
*/
public class InstanceFactory {
private static Map<String,Object> m;
public InstanceFactory() {
if (m == null)
m = new HashMap<>();
m.put("iphone",new Phone(1,300));
m.put("nokia",new Phone(3,10));
}
public Object getBeanByName(String beanName){
return m.get(beanName);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
STEP2 配置檔案
<!--
通過例項工廠方法來配置Bean,首先需要例項化工廠類
class屬性 指向例項工廠方法的全類名
-->
<bean id="instanceFactory"
class="com.iboray.spring4test.factoryBean.InstanceFactory" >
</bean>
<!--
配置Bean
要宣告通過例項工廠方法建立的 Bean
在 bean 的 factory-bean 屬性裡指定擁有該工廠方法的 Bean
在 factory-method 屬性裡指定該工廠方法的名稱
使用 construtor-arg 元素為工廠方法傳遞方法引數
-->
<bean id="nokia" factory-bean="instanceFactory"
factory-method="getBeanByName">
<constructor-arg value="nokia"></constructor-arg>
</bean>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
測試
相關推薦
一篇文章學會Spring4.0
spring概述Spring 是一個開源框架. Spring 為簡化企業級應用開發而生. 使用 Spring 可以使簡單的 JavaBean 實現以前只有 EJB 才能實現的功能. Spring 是一個 IOC(DI) 和 AOP 容器框架. 具體描述 Spring: 輕量級:Spring 是非侵入性的 -
一篇文章學會shell工具篇之sed
哪些 我們 特殊字符 倉庫 刪除 編輯 sta datafile action
sed工具執行原理; 有關sed的參數及action的常見操作方法; 定址; 模式空間和保持空間; 使用標簽
1.首先先來了解一下什麽是sed?
sed叫做流編輯器,在shell腳本
一篇文章學會23種設計模式,你需要的全不在這裡
總體來說設計模式分為三大類:
建立型模式,共五種:工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式。
結構型模式,共七種:介面卡模式、裝飾器模式、代理模式、外觀模式、橋接模式、組合模式、享元模式。
行為型模式,共十一種:策略模式、模板方法模式、觀察者模式、迭代子模式、責任鏈模式、命令模式、備忘
一篇文章學會23種設計模式,你需要的全不在這裡2
一篇文章學會23種設計模式,你需要的全不在這裡
總體來說設計模式分為三大類:
建立型模式,共五種:工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式。
結構型模式,共七種:介面卡模式、裝飾器模式、代理模式、外觀模式、橋接模式、組合模式、享元模式。
行為型模式,共十一種:策略模式、模板方法模式、
新媒體推廣:一篇文章學會全平臺資訊流優化 !你get到了嗎? | 黎想
想必大家都有這樣的思考:我做新媒體優化一年,仍然有很多問題,比如多久更新一次賬戶創意,有規律可循嗎?展點消之間存在什麼關係呢?賬戶出價到底有什麼訣竅嗎?
本次將由藝形藝意工作室創始人,新媒體運營老司機,IT行業觀察者,騰訊網、百度網、今日頭條、搜狐網、網易新聞網、鳳凰新聞網等網站知名專欄作者,《新媒體推廣運
一篇文章對Istio 0.8.0 做個簡單概括
首先我們來看一下Istio大概是個什麼東西呢?
我們經常聽到的,和它繫結的詞彙就是service mesh,但是如果又要追溯service mesh,然後看的越來越多,搞得自己都迷糊了。所以,我們就看Istio。
Istio是架構與Kubernetes之上的
一篇文章學會Spring+SpringMVC+Mybatis+Maven搭建和部署,記一次Spring+SpringMVC+Mybatis+Maven的整合
之前一直沒有用過maven和Mybatis最近自己搭建一個基於Maven的Spring+SpringMVC+Mybatis開發環境。注:有的時候沒有自己動手真正搭過環境(脫離教學的方式),可能有些地方的問題注意不到的。會在介紹搭建的同時記錄一些遇見的坑和一些知識點。首先放上M
一篇文章學會spark-streaming
1.什麼是spark-streaming? 實際生產中會有許多應用到實時處理的場景,比如:實時監測頁面點選,實時監測系統異常,實時監測來自於外部的攻擊。針對這些場景,twitter研發了實時資料處理工具storm,並在後來開源。spark針對這些場景設計了spark
一篇文章學會日誌logback的使用
1、Logback為取代log4j而生
java日誌有:slf4j,log4j,logback,common-logging
slf4j:是規範/介面
日誌實現:log4j,logback,common-logging等
Logback
一篇文章學會Docker命令
目錄
簡介
映象倉庫
login
pull
push
search
本地映象管理
images
rmi
關於0基礎磁盤管理(gpt UEFI...)最好的一篇文章(來自gentoo linux)
blog book wiki mark size hand jsb handbook gen
放鏈接:https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/Disks
順便幾張圖
一篇文章,教你學會Git
eba 時有 當前目錄 文件 展示 遠程分支 amend 解釋 很好
在日常工作中,經常會用到Git操作。但是對於新人來講,剛上來對Git很陌生,操作起來也很懵逼。本篇文章主要針對剛開始接觸Git的新人,理解Git的基本原理,掌握常用的一些命令。
一、Git工作流程
一篇文章帶你學會Linux三劍客之一:awk
awk是一種用於處理文字、模式匹配的程式語言。與sed和grep,俗稱Linux下的三劍客。學會 awk 等於你在 Linux 命令列裡,又多了一種處理文字的選擇。這篇文章重點教你如何使用,看完這篇文章,就大致知道如何使用了,力求簡單使用
術語鋪墊
在awk的文字處理規則裡,awk將文字檔案視為由欄位和記
深入淺出,一篇文章讓你學會Dagger2使用
本篇文章已授權微信公眾號 guolin_blog (郭霖)獨家釋出
前言
最近在做專案中,用到了Dagger2,所以找了一些部落格並參考了菜鳥窩Ivan的視訊,算是知道如何使用了,但是對其理解還相差很遠。所以這篇文章重點針對如何使用和使用中常見的一些問題
一篇文章教你學會Git
本文轉載於掘金Ruheng,總結非常好,故不再重複造輪子。
在日常工作中,經常會用到Git操作。但是對於新人來講,剛上來對Git很陌生,操作起來也很懵逼。本篇文章主要針對剛開始接觸Git的新人,理解Git的基本原理,掌握常用的一些命令。
一、Git工作流
一篇文章讓你學會json和Gson---json全面詳細解析
現在企業越來越多的使用json返回資料,因此熟練使用json解析,是程式設計師必不可少的技能。
一、對json的理解
1)JSON(JavaScript Object Notation, js 物件標記) (javascript 物件標記語言) 是一種輕量級
分享一篇文章,讓你知道計算機為什麼認識0和1
當運算啟動時,首先動作的是CPU的CU,它接到了來自I/O裝置或其他裝置的請求,於是開始行動,首先將PC中的值傳送給主存的MAR,於是MAR會按照這個地址去尋找主存內的資料,找到後MDR會將這段資料傳給IR,(由一串表示操作型別的數字和一串表示操作的物件的數字組成,這兩組數字是連在一起傳給IR的,CU有可靠的
一篇文章圖文並茂地帶你輕鬆學會 HTML5 storage
## html5 storage api
`localStorage` 和 `sessionStorage` 是 `html5` 新增的用來儲存資料的物件,他們讓我們可以以鍵值對的形式儲存資訊。
### 為什麼要有 `storage` ?
我們已經有了 `session` 可以幫助我們儲存資訊,為何還需
一篇文章快速了解 量子計算機 (精心整理) (二)
難題 表示 學技術 公司 如何實現 lan 文章 區分 核心 好了,下面轉入量子計算機的總結:
有趣的量子理論
量子論的一些基本論點顯得並不“玄乎”,但它的推論顯得很“玄”。我們假設一個“量子”距離也就是最小距離的兩個端點A和B。按照量子論,物體從A不經過A和B中的