SpringBoot 02: 初識SpringBoot

1. SpringBoot

產生原因

  • spring, springmvc框架使用上的一些缺點:

  • 需要使用的大量的配置文件

  • 還需要配置各種對象

  • 需要把使用的對象放入到spring容器中才能使用對象

  • 需要了解其他框架配置規則


  • springboot的一些直觀優點:

  • SpringBoot就相當於簡化了配置文件的Spring+SpringMVC(但springboot的核心還是IOC容器)

  • 常用的框架和第三方庫都已經配置好了, 只需要引入使用即可

特點

  • Create stand-alone Spring applications
可以創建spring應用
  • Embed Tomcat, Jetty or Undertow directly (no need to deploy WAR files)
內嵌的tomcat, jetty, Undertow 
  • Provide opinionated ‘starter’ dependencies to simplify your build configuration
提供了starter起步依賴, 簡化應用的配置:   
比如使用MyBatis框架, 需要在Spring項目中, 需要配置MyBatis的對象, SqlSessionFactory以及Dao的代理對象
但在SpringBoot項目中, 只要在pom.xml裏面加入一個mybatis-spring-boot-starter依賴
  • Automatically configure Spring and 3rd party libraries whenever possible
儘可能去自動配置spring和第三方庫, 叫做自動配置(就是把spring中的,第三方庫中的對象都創建好,放到容器中,開發人員可以直接使用)
  • Provide production-ready features such as metrics, health checks, and externalized configuration
提供了健康檢查, 統計, 外部化配置
  • Absolutely no code generation and no requirement for XML configuration
不用生成代碼,不需要使用xml文件做配置

2. SpringBoot項目

地址

@SpringBootApplication註解

  • 位於項目啟動類上面,是複合註解, 包含以下注解
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan
  • 而@SpringBootConfiguration又是包含@Configuration的符合註解
@Configuration
public @interface SpringBootConfiguration {
    @AliasFor(
        annotation = Configuration.class
    )
    boolean proxyBeanMethods() default true;
}

//說明使用了@SpringBootConfiguration註解標註的類,可以作為配置文件使用的,可以使用Bean聲明對象,注入到容器
  • @EnableAutoConfiguration
啟用自動配置,把java對象配置好,注入到spring容器中。例如可以把mybatis的對象創建好,放入到容器中
  • @ComponentScan
掃描器,找到註解,根據註解的功能創建對象,給屬性賦值等等。默認掃描的包:@ComponentScan所在的類,以及其所在類所在的包和子包。

SpringBoot的配置文件

  • 名稱:application
  • 後綴:property(key=value) 或 yml(key:value)
  • 配置文件示例:
  • 例1:application.properties設置端口和上下文
#設置端口號
server.port=9090

#設置訪問應用上下文路徑,contextpath
server.servlet.context-path=/myboot
  • 例2:application.yml,配置文件的結構更加清晰,推薦使用
server:
  port: 9090
  servlet:
    context-path:/myboot

多環境配置文件

  • 實際場景中,項目的配置會有開發環境,測試環境,上線的環境

  • 每個環境有不同的配置信息,例如端口,上下文,數據庫url,用戶名,密碼等等

  • 使用多環境配置文件,可以方便的切換不同的配置

  • 使用方式:創建多個配置文件,名稱規則:application-環境名稱.properties(或者後綴未yml格式)

  • 多環境配置文件的示例如下:

  • 創建開發環境的配置文件:application-dev.properties(或者application-dev.yml )

  • 創建測試者使用的配置:application-test.properties

  • springboot默認讀取application.properties文件,故需在該文件中配置實際需要讀取的核心配置文件

#以激活配置文件 application-dev.properties為例
spring.profiles.active=dev

@ConfigurationProperties

  • 設計思想:把配置文件的數據映射到java對象的屬性上,將配置文件中某些開頭和prefix指定的值相同的對應配置文件中的值賦給對應屬性
  • 例如:application.properties
#自定義key=value
school.name=橘子
school.website=www.test.com
school.address=黑龍江哈爾濱
  • 則對應的實體類應該如下,其中name會被注入配置文件中的school.name的值,其他屬性類似
@Component
@ConfigurationProperties(prefix = "school")
public class SchoolInfo {

    private String name;

    private String website;

    private String address;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getWebsite() {
        return website;
    }

    public void setWebsite(String website) {
        this.website = website;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "SchoolInfo{" +
                "name='" + name + '\'' +
                ", website='" + website + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}

使用jsp

  • SpringBoot不推薦使用jsp, 而是使用模板技術代替jsp
  • 如果要使用jsp, 需要添加如下依賴,負責編譯jsp文件
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
</dependency>
  • 如果需要使用servlet, jsp, jstl的功能, 需要添加如下依賴
<dependency>
	<groupId>javax.servlet</groupId>
	<artifactId>jstl</artifactId>
</dependency>

<dependency>
	<groupId>javax.servlet</groupId>
	<artifactId>javax.servlet-api</artifactId>
</dependency>

<dependency>
<groupId>javax.servlet.jsp</groupId>
	<artifactId>javax.servlet.jsp-api</artifactId>
	<version>2.3.1</version>
</dependency>
  • 創建一個存放jsp的目錄, 一般為src/main/webapp目錄,記得設置webapp的目錄屬性
  • 需要在pom.xml指定jsp文件編譯後的存放目錄:META-INF/resources
<resource>
	<directory>src/main/webapp</directory>
	<targetPath>META-INF/resources</targetPath>
	<includes>
		<include>**/*.*</include>
	</includes>
</resource>
  • 創建Controller, 訪問jsp
  • 在application.propertis文件中配置視圖解析器
#配置視圖解析器
spring.mvc.view.prefix=/
spring.mvc.view.suffix=.jsp

手動使用SpringBoot容器獲取對象

  • 關注SpringBoot工程的主啟動類的run方法
@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
  • 關註上述run方法的返回值
public static ConfigurableApplicationContext run(Class<?> primarySource, String... args) {
    return run(new Class[]{primarySource}, args);
}
  • 而ConfigurableApplicationContext是ApplicationContext的子接口
public interface ConfigurableApplicationContext extends ApplicationContext, Lifecycle, Closeable {
}
  • 所以接收SpringBoot主啟動類的run方法的返回值就可以獲取到SpringBoot容器
  • 之後便可以按照需求調用SpringBoot容器的方法獲取已經註冊到容器中的對象

CommandLineRunner接口 與 ApplcationRunner接口

  • 兩個接口
@FunctionalInterface
public interface CommandLineRunner {
    void run(String... args) throws Exception;
}

@FunctionalInterface
public interface ApplicationRunner {
    void run(ApplicationArguments args) throws Exception;
}
  • 兩個接口都有一個run方法
  • SpringBoot項目的主啟動類實現上述接口,重寫run方法,在容器對象創建好後自動執行run()方法
  • 可以在容器對象創建好後完成一些自定義的操作