1. 程式人生 > >一篇文章學會Spring4.0

一篇文章學會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、屬性和方法

  1. 引用其他物件: 
    這裡寫圖片描述
  2. 引用其他物件的屬性 
    這裡寫圖片描述
  3. 呼叫其他方法,還可以鏈式操作 
    這裡寫圖片描述
    這裡寫圖片描述
  4. 呼叫靜態方法或靜態屬性:通過 T() 呼叫一個類的靜態方法,它將返回一個 Class Object,然後再呼叫相應的方法或屬性: 
    這裡寫圖片描述

SpEL支援的運算子號

  1. 算數運算子:+, -, *, /, %, ^: 
    這裡寫圖片描述
  2. 加號還可以用作字串連線: 
    這裡寫圖片描述
  3. 比較運算子: <, >, ==, <=, >=, lt, gt, eq, le, ge 
    這裡寫圖片描述
  4. 邏輯運算子號: and, or, not, | 
    這裡寫圖片描述
  5. if-else 運算子:?: (ternary), ?: (Elvis) 
    這裡寫圖片描述
  6. if-else 的變體 
    這裡寫圖片描述
  7. 正則表示式: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中的