springboot入門

Spring Boot概述

什么是Spring Boot

Spring Boot 是由 Pivotal 團隊提供的全新框架贫堰,其設計目的是用來簡化新 Spring 應用的初始搭建以及開發(fā)過程。該框架使用了特定的方式來進行配置诅需,從而使開發(fā)人員不再需要定義樣板化的配置顺少。簡單的來說 Spring Boot 這個項目整合目前很多的流行的第三方框架,并且做了一系列的默認配置,我們無需在進行手動配置,直接拿過來直接使用! 比如我們要使用 Spring mvc 開發(fā) web 應用,那么我們可能需要經過以下幾步

  • 導入 spring mvc 的相關依賴包
  • 在 web.xml 文件中配置 Spring mvc 的前端控制器
  • 創(chuàng)建一個 spring mvc 的配置文件
  • 在 spring mvc 的配置文件中進行相關配置
  1. 配置注解掃描路徑
  2. 配置處理器映射器
  3. 配置處理器適配器
  4. 配置視圖解析器
  • 開發(fā) Controller

那么現在如果我們使用 Spring Boot 開發(fā)我們的 web 應用,那么具體的步驟如下:

  • 導入相關的依賴包
  • 開發(fā) Controller
    單單從開發(fā)步驟上講都比我們的原始開發(fā)少了很多,其中的配置部分 Spring Boot 幫我們完成了,不需要我們在進行配置,當然如果我們想
    更改 Spring Boot 的默認配置也是可以的.極大的簡化了我們的開發(fā).

Spring Boot 的核心功能

  • 獨立運行的 spring 項目: Spring Boot 可以以 jar 包形式直接運行抖部,如 java -jar xxx.jar 優(yōu)點是:節(jié)省服務器資源
  • 內嵌 servlet 容器: Spring Boot 可以選擇內嵌 Tomcat淫痰,Jetty把介,這樣我們無須以 war 包形式部署項目暑刃。
  • 提供 starter 簡化 Maven 配置: 在 Spring Boot 項目中為我們提供了很多的 spring-boot-starter-xxx 的項目(我們把這個依賴可以稱之為
    起步依賴),我們導入指定的這些項目的坐標,就會自動導入和該模塊相關的依賴包:
    例如我們后期再使用 Spring Boot 進行 web 開發(fā)我們就需要導入 spring-boot-starter-web 這個項目的依賴,導入這個依賴以后!那么
    Spring Boot 就會自動導入 web 開發(fā)所需要的其他的依賴包,如下圖所示:
  • 自動配置 spring: Spring Boot 會根據在類路徑中的 jar 包厢漩,類,為 jar 包里的類自動配置 Bean岩臣,這樣會極大減少我們要使用的配置溜嗜。
    當然 Spring Boot 只考慮了大部分開發(fā)場景,并不是所有的場景架谎,如果在實際的開發(fā)中我們需要自動配置 Bean炸宵,而 Spring Boot 不
    能滿足,則可以自定義自動配置谷扣。
  • 準生產的應用監(jiān)控: Spring Boot 提供基于 http土全,ssh捎琐,telnet 對運行時的項目進行監(jiān)控
  • 無代碼生成和 xml 配置: Spring Boot 大量使用 spring4.x 提供的注解新特性來實現無代碼生成和 xml 配置。spring4.x 提倡使用 Java
    配置和注解配置組合裹匙,而 Spring Boot 不需要任何 xml 配置即可實現 spring 的所有配置瑞凑。

Spring Boot 的優(yōu)點和缺點

優(yōu)點

  • 快速構建項目
  • 對主流框架無縫集成
  • 項目可以獨立運行,無需依賴外部 servlet 容器
  • 提供運行時的應用監(jiān)控
  • 極大提高了開發(fā)概页,部署效率

缺點

  • 資料相對比較少
  • 版本迭代較快

Spring Boot 入門案例

使用 Spring Boot 開發(fā) web 應用

在 pom.xml 添加依賴

在 pom.xml 文件我們需要添加兩部分的依賴:

  • 讓我們的項目繼承 spring-boot-starter-parent 的工程
  • 加入 spring-boot-starter-web 的依賴
<!-- 添加父工程 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
</parent>
<dependencies>
<!-- 加入web開發(fā)的支持 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>

Spring Boot 項目默認的編譯版本是 1.6,如果我們想使用 1.7 的編譯版本我們就需要在 pom.xml 文件中定義一個變量

<!-- 定義變量 -->
<properties>
<java.version>1.7</java.version>
</properties>

新建controller

HelloController.java

package com.itheima.springboot.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class HelloController {

    @RequestMapping("/hello")
    @ResponseBody
    public String hello() {
        return "hello springboot";
    }
}

新建啟動類

package com.itheima.springboot.controller;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

//設置springboot啟動類
@SpringBootApplication
public class HelloSpringBootApplication {

    public static void main(String[] args) {
        
        //啟動應用
        SpringApplication.run(HelloSpringBootApplication.class, args);
        
    }
}

訪問

localhost:8080/hello

以jar包方式運行

pom.xml

<build>
        <plugins>
            <!-- Spring Boot的maven插件 -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

maven-run-build...-輸入命令:package籽御,以命令行運行jar

Spring Boot核心

無 xml 配置的實現

自從 spring3.0 以后 spring 提供了很多的注解來替代 xml 文件的配置.最為核心的是下面的兩個注解:

  • @Configuration 標注該類是一個配置類.類似于我們定義的 applicationContext.xml
  • @Bean 類似于我們在之前的 spring 配置文件中配置的<bean id=”” class=””/>

有了上面的兩個注解我們就可以使用編碼的方式來完成 spring 的相關配置,接下來我們就來使用 java 編碼的方式來完成 spring 的配置

入門Demo
  1. 導入相關依賴

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.itheima</groupId>
    <artifactId>itheima-javaconfig</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <properties>
        <spring.version>4.3.7.RELEASE</spring.version>
    </properties>
    <dependencies>
        <!-- Spring依賴包 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</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-support</artifactId>
            <version>${spring.version}</version>
        </dependency>
    </dependencies>
    
    
    
    <build>
        <plugins>
            <!-- maven的編譯插件 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
            </plugin>
        </plugins>
    </build>
    
</project>

HelloService.java

package com.itheima.javaconfig.service;

public class HelloService {
    
    public String sayHello(){
        return "Hello JavaConfig";
    }

}

配置類ApplicationConfiguration.java

package com.itheima.javaconfig.service;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration    //相當于我們定義了一個applicationContext.xml文件
public class ApplicationConfiguration {

    @Bean // 相當于我們在配置文件中定義了一個bean
    public HelloService helloService() {
        return new HelloService() ;
    }

}

測試類JavaConfigTest.java

package com.itheima.javaconfig.service;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class JavaConfigTest {

    public static void main(String[] args) {
        // 通過AnnotationConfigApplicationContext這個類獲取Spring容器
        AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(ApplicationConfiguration.class);
        
        //從spring容器獲取bean
        HelloService helloService = applicationContext.getBean(HelloService.class);
        
        //調用sayHello方法
        String result = helloService.sayHello() ;
        System.out.println(result);
        }

}

練習(配置 JdbcTemplate)

需求使用 JdbcTemplate 查詢所有的用戶數據
導入 user.sql 腳本文件

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.itheima</groupId>
    <artifactId>itheima-javaconfig-jdbctemplate</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <properties>
        <druid.version>1.1.6</druid.version>
        <mysql.version>5.1.44</mysql.version>
        <spring.version>4.3.7.RELEASE</spring.version>
    </properties>

    <dependencies>
        <!-- 加入spring-jdbc的依賴包 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!-- 加入druid的數據源 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>${druid.version}</version>
        </dependency>
        <!-- 加入mysql的驅動 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.version}</version>
        </dependency>
        <!-- Spring依賴包 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</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-support</artifactId>
            <version>${spring.version}</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <!-- maven的編譯插件 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
            </plugin>
        </plugins>
    </build>


</project>

創(chuàng)建javabean
User.java

package com.itheima.javaconfig.domain;

public class User {

    
    private Integer id ; // 唯一標識
    
    private String userName ; // 用戶名
    
    private String sex ; // 性別
    
    private String address ; // 住址

    /**
     * @return id
     */
    public Integer getId() {
        return id;
    }

    /**
     * @return userName
     */
    public String getUserName() {
        return userName;
    }

    /**
     * @return sex
     */
    public String getSex() {
        return sex;
    }

    /**
     * @return address
     */
    public String getAddress() {
        return address;
    }

    /**
     * @param id 要設置的 id
     */
    public void setId(Integer id) {
        this.id = id;
    }

    /**
     * @param userName 要設置的 userName
     */
    public void setUserName(String userName) {
        this.userName = userName;
    }

    /**
     * @param sex 要設置的 sex
     */
    public void setSex(String sex) {
        this.sex = sex;
    }

    /**
     * @param address 要設置的 address
     */
    public void setAddress(String address) {
        this.address = address;
    }

    /* (非 Javadoc)
     * @see java.lang.Object#toString()
     */
    @Override
    public String toString() {
        return "User [id=" + id + ", userName=" + userName + ", sex=" + sex + ", address=" + address + "]";
    }

    public User(Integer id, String userName, String sex, String address) {
        super();
        this.id = id;
        this.userName = userName;
        this.sex = sex;
        this.address = address;
    }

    public User() {
        super();
        // TODO 自動生成的構造函數存根
    }
    
    

}

db.properties

jdbcDriverClassName=com.mysql.jdbc.Driver
jdbcUrl=jdbc:mysql://localhost:3306/spring-boot
jdbcUserName=root
jdbcPassword=suntong

編寫配置類

JdbcTemplateConfiguration.java

package com.itheima.javaconfig;

import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.jdbc.core.JdbcTemplate;

import com.alibaba.druid.pool.DruidDataSource;

@Configuration
@PropertySource("classpath:db.properties")
public class JdbcTemplateConfiguration {
    
    @Value("${jdbcDriverClassName}")
    private String driverClassName;
    
    @Value("${jdbcUrl}")
    private String jdbcUrl;
    
    @Value("${jdbcUserName}")
    private String jdbcUserName;
    
    @Value("${jdbcPassword}")
    private String jdbcPassword;

    

    /**
     * 配置數據源
     * 
     * @return
     */
    @Bean
    public DataSource dataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(driverClassName);
        dataSource.setUrl(jdbcUrl);
        dataSource.setUsername(jdbcUserName);
        dataSource.setPassword(jdbcPassword);
        return dataSource;
    }

    @Bean
    public JdbcTemplate jdbcTemplate(DataSource dataSource) {
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
        return jdbcTemplate;
    }
}

編寫測試類
JdbcTemplateJavaConfigTest.java

package com.itheima.javaconfig;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;

import com.itheima.javaconfig.domain.User;

public class JdbcTemplateJavaConfigTest {

    public static void main(String[] args) {
        // 獲取spring容器
        AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(JdbcTemplateConfiguration.class);
        // 獲取JdbcTemplate
        JdbcTemplate jdbcTemplate = applicationContext.getBean(JdbcTemplate.class);
        // 進行查詢
        List<User> users = jdbcTemplate.query("select * from user", new RowMapper<User>(){
        
            @Override
            public User mapRow(ResultSet rs, int rowNum) throws SQLException {
                //創(chuàng)建User對象
                User user = new User();
                
                user.setId(rs.getInt("id"));
                user.setUserName(rs.getString("username"));
                user.setSex(rs.getString("sex"));
                user.setAddress(rs.getString("address"));
                return user;
            }
        }) ;
        
        // 輸出
        System.out.println(users);
    }
}

以上就是通過spring3.0之后提供的注解方式實現無xml配置。

接下來看怎么實現的自動化配置惰匙。

自動化配置

編寫入門案例的時候我們使用的是 Spring mvc 作為我們的表現層框架,但是要使用 Spring mvc 我們就需要在web.xml 文件中配置 Spring mvc 的前端控制器(DispatcherServlet). 但是我們剛才在編寫入門案例的時候我們并沒有去做任何的配置.那么接下來我們就來講解一下 Spring Boot 中自動配置的原理.

入口類和@SpringBootApplication

Spring Boot 的項目一般都會有*Application 的入口類技掏,入口類中會有 main 方法,這是一個標準的 Java 應用程序的入口方法项鬼。Spring Boot會自動掃描@SpringBootApplication 所在類的同級包以及下級包中的 bean(如果是 jpa 項目還會自動掃描標注@Entity 的實體類)
@SpringBootApplication 注解是 Spring Boot 的核心注解

以上為該注解的源碼哑梳,在其中還有很多的注解,所以@SpringBootAplication稱為組合注解

組合注解作用就是簡化我們的注解使用: 我們在某一個類上使用了@SpringBootApplication
那么就相當于在該類上使用了該注解上定義的其他的三個注解

@SpringBootConfiguration(注意不是SpringBootApplication)

@SpringBootConfiguration 這是 Spring Boot 項目的配置注解秃臣,源碼如下:

這個注解也是一個組合注解, 在 Spring Boot 項目中推薦使用@ SpringBootConfiguration 替代@Configuration

@EnableAutoConfiguration

啟用自動配置涧衙,該注解會使 Spring Boot 根據項目中類路徑依賴的 jar 包自動配置項目的配置項:例如: 我們添加了 spring-boot-starter-web
依賴,會自動添加會自動添加 tomcat 和 springmvc 的依賴

那么 spring boot 項目會自動為我們配置 tomcat 和 springmvc; 具體體現在tomcat的配置使用的是8080 端口,Springmvc請求處理方式為 /

@ComponentScan

默認掃描@SpringBootApplication 所在類的同級目錄以及它的子目錄(所以之前的案例中把controller放到和啟動類同一個包下)

DispatcherServlet 自動配置分析

DispatcherServlet 自動配置源碼解析

入門案例中我們只是加入了 spring-boot-starter-web 這么一個依賴,就可以實現 DispatcherServlet 的相關配置,這是為什么呢?注意當我們加
入了 spring-boot-starter-web 的依賴以后,根據 maven 的依賴傳遞特性,會自動將一些依賴包加入到我們的項目中; 比如會自動添加 tomcat
和 springmvc 的依賴:

那么這些依賴包的確加入到了我們的項目中,那么怎么完成的自動配置呢? 因為在加入 spring-boot-starter-web 依賴的時候,會自動將另外
一個依賴加入進來: 這個依賴包就是

這個包中其實定義了很多技術點的自動配置

那么和我們 web 開發(fā)相關的自動配置類是在 web 包下,在這個 web 包中定義了很多的 xxxAutoConfiguration 這樣的類,這些類其實就是用
來完成自動配置的; 我們打開 DispatcherServletAutoConfiguration 看看

上面的是關于 DispatcherServletAutoConfiguration 的定義,通過源碼我們發(fā)現在這個類上定義了很多的好幾個注解:

  • @AutoConfigureOrder: 這個注解自動配置的順序定義,取值為 int 的最小值,優(yōu)先級最高
  • @Configuration: 這個表示該類是一個配置類,類似于我們定義了一個 applicationContext.xml 文件
  • @ConditionalOnWebApplication: 這是一個條件注解,當前項目是 web 環(huán)境的條件下,啟動自動化配置
  • @ ConditionalOnClass: 當前類路徑下有指定的類的條件下奥此,會啟用自動化配置
  • @ AutoConfigureAfter: 定義該配置類的載入順序;該類上表示(后于 EmbeddedServletContainerAutoConfiguration)載入

其實看到這里我們就可以明白,Spring Boot 中的自動配置其實使用的就是這些條件注解來完成的,當滿足某一些添加以后就可以啟動自動配置弧哎,條件注解時核心注解

常見的條件注解

自定義自動配置

需求: 自定義自動配置類,完成 HelloService 的自動配置(itheima-spring-starter-hello)

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.itheima</groupId>
    <artifactId>itheima-autoconfig-helloservice</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <dependencies>
        <!-- 引入springboot自動配置的jar包 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-autoconfigure</artifactId>
            <version>1.5.9.RELEASE</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

HelloService.java

package com.itheima.autoconfig.service;

public class HelloService {

    private final String DEFAULT_SAYWORD = "hello";

    public String sayHello(String sayWord) {
        if (sayWord != null && !sayWord.trim().equals("")) {
            return sayWord;
        }
        return DEFAULT_SAYWORD;
    }

}

編寫配置類
HelloServiceAutoConfig.java


package com.itheima.autoconfig.service;

import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@ConditionalOnClass(HelloService.class) //開啟自動配置,如果類路徑下有HelloService就啟動這個自動化配置
public class HelloServiceAutoConfig {
    
    @Bean
    @ConditionalOnMissingBean(HelloService.class) //當spring容器沒有HelloService的Bean時啟用配置
    public HelloService helloService() {
            
        return new HelloService();
        
    }

}

注冊自動配置類

在 src/main/resources 目錄下創(chuàng)建一個: META-INF 這個文件夾,然后在該文件夾下創(chuàng)建一個文件: spring.factories; 內容如下

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\com.itheima.autoconfig.service.HelloServiceAutoConfig

Spring boot 項目在運行的時候會讀取這個配置文件中的自動配置,來完成自動配置

編寫測試工程

新建工程

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.itheima</groupId>
    <artifactId>itheima-autoconfig-test</artifactId>
    <version>0.0.1-SNAPSHOT</version>


    <!-- 定義變量 -->
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.9.RELEASE</version>
    </parent>
    <dependencies>
        <!-- 導入spring-boot-starter -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <!-- 導入spring boot 測試的依賴包 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- 加入itheima-autoconfig-helloservice依賴 -->
        <dependency>
            <groupId>com.itheima</groupId>
            <artifactId>itheima-autoconfig-helloservice</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
    </dependencies>


</project>

測試類

AutoConfigApplication.java

package com.itheima.autoconfig;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

import com.itheima.autoconfig.service.HelloService;

@SpringBootApplication
public class AutoConfigApplication {

    public static void main(String[] args) {
        //啟動項目,返回spring容器
        ConfigurableApplicationContext applicationContext = SpringApplication.run(AutoConfigApplication.class, args);
        
        //獲取bean
        HelloService helloService = applicationContext.getBean(HelloService.class);
        
        //調用
        String sayHello = helloService.sayHello(null);
        
        //輸出
        System.out.println(sayHello);
        
    }
}

JUnit測試
SpringBootAutoConfigTest.java



import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.itheima.autoconfig.AutoConfigApplication;
import com.itheima.autoconfig.service.HelloService;

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = AutoConfigApplication.class)
public class SpringBootAutoConfigTest {
    
    @Autowired
    private HelloService helloService;

    @Test
    public void testAutoConfig() {
        String sayHello = helloService.sayHello(null);
        System.out.println(sayHello);
    }
}

(注意在pom中配置的test依賴的scope是test,所以文件要放在test目錄下)

關閉自動配置

如果我們不需要 Spring Boot 自動配置稚虎,想關閉某一項的自動配置撤嫩,該如何設置呢?比如我們不想要 Spring Boot 為我們配置的
DispatcherServlet,如何完成呢?@SpringBootApplication(exclude = {DispatcherServletAutoConfiguration.class})

更改默認的配置

Spring Boot 使用一個全局的配置文件,這個全局配置文件為 application.properties 或者 application.yml; 放置在 src/main/resources 目錄下,
這個全局配置文件的作用是對一些默認配置的配置值進行修改

比如我們可以更改 tomcat 的端口號: server.port=8088

我們也可以更改 springmvc 的攔截規(guī)則: server.servlet-path=*.do
測試: http://localhost:8088/hello.do
更多的配置參見資料(Spring Boot 常用配置.docx)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末蠢终,一起剝皮案震驚了整個濱河市序攘,隨后出現的幾起案子,更是在濱河造成了極大的恐慌寻拂,老刑警劉巖程奠,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異祭钉,居然都是意外死亡瞄沙,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進店門慌核,熙熙樓的掌柜王于貴愁眉苦臉地迎上來距境,“玉大人,你說我怎么就攤上這事垮卓〉婀穑” “怎么了?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵粟按,是天一觀的道長诬滩。 經常有香客問我霹粥,道長,這世上最難降的妖魔是什么碱呼? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任蒙挑,我火速辦了婚禮,結果婚禮上愚臀,老公的妹妹穿的比我還像新娘忆蚀。我一直安慰自己,他們只是感情好姑裂,可當我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布馋袜。 她就那樣靜靜地躺著,像睡著了一般舶斧。 火紅的嫁衣襯著肌膚如雪欣鳖。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天茴厉,我揣著相機與錄音泽台,去河邊找鬼。 笑死矾缓,一個胖子當著我的面吹牛怀酷,可吹牛的內容都是我干的。 我是一名探鬼主播嗜闻,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼蜕依,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了琉雳?” 一聲冷哼從身側響起样眠,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎翠肘,沒想到半個月后檐束,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡束倍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年被丧,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肌幽。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡晚碾,死狀恐怖抓半,靈堂內的尸體忽然破棺而出喂急,到底是詐尸還是另有隱情,我是刑警寧澤笛求,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布廊移,位于F島的核電站糕簿,受9級特大地震影響,放射性物質發(fā)生泄漏狡孔。R本人自食惡果不足惜懂诗,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望苗膝。 院中可真熱鬧殃恒,春花似錦、人聲如沸辱揭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽问窃。三九已至亥鬓,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間域庇,已是汗流浹背嵌戈。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留听皿,地道東北人熟呛。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像写穴,于是被迫代替她去往敵國和親惰拱。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,077評論 2 355

推薦閱讀更多精彩內容