1. 程式人生 > 其它 >乾貨|app自動化測試之Appium 原理 與 JsonWP 協議分析

乾貨|app自動化測試之Appium 原理 與 JsonWP 協議分析

SpringBoot學習筆記

SpringBOOt概念

SpringBoot提供了一種快速使用Spring的方式,基於約定大於配置的思想,讓開發人員專注於邏輯業務,從而提高開發效率

SpringBoot功能

  1. 自動配置
    SpringBoot自動配置是一個執行時(應用啟動時)的過程,自動決定Spring配置應該用哪個。
  2. 起步依賴
    起步依賴本質上是一個maven專案物件模型(Project Object Model, POM),定義了對其他庫的傳遞依賴,將具備某種功能的座標打包到一起,並提供一些預設的功能
  3. 輔助功能
    提供了一些大型專案中常見的非功能特性,如嵌入式伺服器、安全、指標、健康檢測、外部配置等
    SpringBoot並不是對Spring功能上的增強,而是提供一種快速使用Spring的方式

SpringBoot快速入門

需求

搭建SpringBoot工程,定義HelloChontroller.hello()方法,返回“Hello SpringBoot”

步驟

  1. 建立Meaven專案
  2. 匯入SpringBoot起步依賴
  3. 定義Controller
  4. 編寫引導類
  5. 啟動測試

小節

  • SpringBoot在建立專案時,使用jar打包
  • SpringBoot的引導類是整個專案的入口,執行main方法即可啟動
  • 使用SpringBoot和Spring構建的專案,業務程式碼方式完全一樣

SpringBoot配置

配置檔案分類

SpringBoot是基於約定的,很多配置有預設值,可以使用application.properties和application.yaml(yml)進行自定義配置

  • properties:
server.port=8080
  • yml:
server:
  port: 8080

小節

  • SpringBoot提供了2種配置檔案型別:properties和yml/yaml
  • 配置檔名稱必須是application
  • 在同一級目錄下的優先順序順序:properties>yml>yaml

yaml

yaml是一種能夠直觀的被電腦識別的資料序列化格式,並且更容易被人類閱讀,其檔案的副檔名可以使用.yml或者.yaml

  • yaml格式
server:
  port: 8080
  address: 127.0.0.1

簡潔,以資料為核心

yaml基本語法

  • 大小寫敏感
  • 資料值前必須含有空格作為分隔符
  • 使用縮排表示層級關係
  • 縮排不允許使用Tab鍵,只允許使用空格
  • 縮排的空格數目不重要,只要相同層級的元素左側對齊即可
  • #表示註釋

yaml資料格式

  • 物件(map):鍵值對的集合
person:
  name: zhangsan
#行內寫法
person: {name: zhangsan}
  • 陣列
address:
  - beijing
  - shanghai
# 行內寫法
address: [beijing,shanghai]
  • 純量:單個值,不可再分
msg1: 'hello \n world' # 單引號忽略轉義字元
msg2: "hello \n world" # 雙引號識別轉義字元

yaml引數引用

name: zhangsan
person:
  name: ${name}

讀取配置內容

  • @value
    @Value("${name}")
    private String name;
  • Enviroment
    @Autowired
    private Environment environment;
    System.out.println(environment.getProperty("person.name"));
  • @ConfigurationProperties
@Component
@ConfigurationProperties(prefix = "person")
public class Person{}

profile

SpringBoot開發的應用通常會被安裝到不同的環境(開發、測試、生產),其中資料庫地址、伺服器埠等等配置需要在打包時進行修改。profile能夠對配置環境進行動態切換。

profile配置方式

  • 多profile檔案方式(建立多個profile檔案如application-dev.properties/application-pro.properties/application-test.properties)
  • yml多文件方式(利用---將文件分割)
---
server:
  port: 8083

spring:
  config:
    activate:
      on-profile: test
---

profile啟用方式

  • 配置檔案
spring:
  profiles:
    active: dev #dev/pro/test
  • 虛擬機器引數:-Dspring.profiles.active=test
  • 命令列引數:--spring.profiles.active=pro

內部配置載入順序

SpringBoot程式啟動時,會從以下為主載入配置檔案:

  1. file:./config/: 當前目錄下的/config目錄下
  2. file:./: 當前專案的根目錄
  3. classpath:/config/: classpath的/config目錄
  4. classpa:/: classpath的根目錄
    載入順序為上文的排列熟悉怒,高優先順序配置的屬性會生效

外部配置載入順序

SpringBoot整合其他框架

整合Junit

  1. 引入start-test依賴
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
  1. 新增測試註解
  • @RunWith(SpringRunner.class)
  • @SpringBootTest(classes=啟動類.class)
@SpringBootTest(classes = SpringBootStudyApplication.class)
public class UserServiceTest {

    @Autowired
    private UserService userService;

    @Test
    public void test(){
        userService.add();
    }
}

整合redis

  1. 引入redis起步依賴
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
  1. 配置redis屬性
spring:
  redis:
    host:127.0.0.1
    port:6379
  1. 注入RedisTemplate模板
@Autowired
private RedisTemplate redistemplate;

整合mybatis

  1. 引入mybatis起步依賴,新增mysql驅動
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.2</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
  1. 編寫DataSource和MyBatis相關配置
# datasource
spring:
  datasource:
    url: jdbc:mysql:///test_db
    username: root
    password:
    driver-class-name: com.mysql.cj.jdbc.Driver

# mybatis
mybatis:
  mapper-locations: classpath:mapper/*Mapper.xml
  type-aliases-package: com.rsk.springboot1.entity
  1. 註解開發
@Mapper
public interface UserMapper {

    public List<User> findAll();

}


@Autowired
private UserMapper userMapper;

SpringBoot原理分析

自動配置機制

Condition

Condition是Spring4.0增加的條件判斷功能,可實現選擇性的Bean建立,可自定義擴充套件

  • 自定義擴充套件步驟:
  1. 實現Condition介面(MyCondition.class)
public class MyCondition implements Condition {
    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        Map<String, Object> annotationAttributes = metadata.getAnnotationAttributes(ConditionOnClass.class.getName());
        //獲取註解傳入的元資料中的鍵值對map
        String[] value = (String[]) annotationAttributes.get("value");
        //自定義條件判斷函式
        if (value[0].equals("0")){
            return true;
        }
        return false;
    }
}
  1. 自定義註解(ConditionOnClass)
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Conditional(MyCondition.class)
public @interface ConditionOnClass {
    String[] value();
}

  1. Spring配置類中呼叫註解(UserConfig.class)
@Configuration
public class UserConfig {

    @Bean
    @ConditionOnClass(value = "1")
    public User user(){
        return new User();
    }
}

  • SpringBoot提供的常用條件註解:
  1. ConditionOnProperty:判斷配置檔案是否有對應屬性和值後才初始化Bean
  2. ConditionOnClass:判斷環境中是否有對應位元組碼檔案才初始化Bean
  3. ConditionOnMissingBean:判斷環境中沒有對應的Bean才初始化Bean

@Enable*註解

@Enable*註解用於動態啟動某些功能,底層原理是使用@Import註解匯入一些配置類,實現Bean的動態載入

@Import註解

@Enable*底層依賴@Import註解匯入所需要的類,使用@Import註解匯入的類會被Spring容器載入到IOC容器中,以下有4種用法:

  • 匯入Bean
  • 匯入配置類
  • 匯入ImportSelector實現類,一般用於載入配置檔案中的類
  • 匯入ImportBeanDefinitionRegistrar實現類

@EnableAutoConfiguration註解

  • @EnableAutoConfiguration註解內部使用@Import({AutoConfigurationImportSelector.class})來載入配置類
  • 配置檔案位置:\META-INF\spring.factories,該配置檔案中定義了大量的配置類,當SpringBoot啟動時會自動載入這些配置類,初始化Bean
  • 不是所有Bean都會被初始化,在配置類中使用@Configuration註解來載入滿足條件的Bean

自定義starter

需求:(自定義redis-starter,要求匯入該座標時,SpringBoot能夠自動建立Bean)
步驟:

  1. 建立redis-spring-boot-autoconfigure模組
  2. 建立redis-spring-boot-starter模組,依賴前者
  3. 在redis-spring-boot-autoconfigure中初始化Jedis的Bean,並定義META-INF/spring.factories檔案
  4. 在測試模組中引入自定義的redis-starter依賴,測試獲取Jedis的Bean,操作redis

監聽機制

啟動流程分析