一、Spring boot概述

Spring Boot是一个便捷搭建 基于spring工程的脚手架。
简化工程的配置,依赖管理;实现了开发人员把时间都集中在业务开发上。

注意:Spring Boot没有Bean配置文件,所有的spring配置都用注解来配置。

 

二、Spring Boot入门

1、创建Module

        创建一个普通的Module,不要选任何骨架

2、pom.xml(父依赖、启动依赖、java版本)

        为什么【启动器依赖】的版本不需要设置?因为【父依赖】spring-boot-starter-parent 已经定好了版本。

        SpringBoot 官方出的【启动器依赖】,都是以 spring-boot-starter- 开头

<?xml version="1.0" encoding="UTF-8"?>
<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.lt</groupId>
    <artifactId>lt_springboot</artifactId>
    <version>1.0-SNAPSHOT</version>

    <!--1、Spring Boot的父级依赖,这样当前的项目就是Spring Boot项目-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.0.RELEASE</version>
        <!--只要设置springboot版本,其它spring-boot-starter-下引用版本都不要,SpringBoot帮我们解决-->
    </parent>

    <dependencies>
        <!--2、Web项目(启动器依赖)-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    <!--3、编译的java版本-->
    <properties>
        <java.version>11</java.version>
    </properties>
</project>

3、启动引导类

        * SpringBoot 都有一个启动引导类,这是工程的入口类
        * 并在引导类中添加 @SpringBootApplication
        * 这个注解有什么用?
        *    1、组件扫描:扫描com.lt下的所有注解
        *    2、自动整合:
        *    3、配置:

package com.lt;

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

/**
 * SpringBoot 都有一个启动引导类,这是工程的入口类
 * 并在引导类中添加 @SpringBootApplication
 * 这个注解有什么用?
 *    1、组件扫描:扫描com.lt下的所有注解
 *    2、自动整合:
 *    3、配置
 */
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class,args); //指定入口类Application
    }
}

4、Controller

package com.lt.Controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

//@RestController 整合了@Controller 和 @ResponseBody
@RestController
public class HelloController {
    @GetMapping("/hello")
    public String hello(){
        return "hello ,Spring Boot!";
    }
}

注意:SpringBoot中不用扫描Controller组件

5、使用引导类启动

springboot service autowire 构造参数 springboot构造器_bc

6、访问地址 http://localhost:8080/hello

三、java代码创建spring配置

Java代码创建spring配置:用java类和一些注解,创建spring配置。

比较常用的注解有:
      @Configuration:声明一个类作为配置文件,代替xml文件
      @Bean: 声明在方法是上,将方法返回值加入Bean容器,代替<bean>标签
      @Value: 属性注入
      @PropertySource:指定外部.properties属性文件

实例:使用@Value获取配置文件的配置项,并结合@Bean注册组件到Spring
步骤:
1、添加依赖:druid数库连接池
2、创建数库
3、创建数据库参数的配置文件jdbc.properties
4、创建配置类
5、改造处理器注入数据源并使用

1、添加依赖pom.xml

<!--druid数库连接池-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.22</version>
        </dependency>

2、创建库

3、resources文件夹下,创建数据库参数的配置文件jdbc.properties

        

springboot service autowire 构造参数 springboot构造器_Source_02

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test
jdbc.username=root
jdbc.password=root

4、创建config包,编写配置类 JdbcConfig。

        @Configuration :将类指定为spring 配置类
        @PropertySource("classpath:jdbc.properties") :将.properties文件加载到spring 容器里
        @Bean    :  将方法的返回值存储到spring容器里
        @Value :注入普通属性值

package com.lt.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;

import javax.sql.DataSource;

@Configuration
@PropertySource("classpath:jdbc.properties") //配置文件地址
public class JdbcConfig {

    //@Value 获得配置文件的配置项
    @Value("${jdbc.url}")
    String url;
    @Value("${jdbc.driverClassName}")
    String driverClassName;
    @Value("${jdbc.username}")
    String username;
    @Value("${jdbc.password}")
    String password;

    @Bean //注册数据源
    public DataSource dataSource(){
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(driverClassName);
        dataSource.setUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(password);


        return dataSource;
    }
}

5、Controller

        

springboot service autowire 构造参数 springboot构造器_bc_03

6、调试

         

springboot service autowire 构造参数 springboot构造器_bc_04

          刷新浏览器地址:http://localhost:8080/hello

          

springboot service autowire 构造参数 springboot构造器_bc_05

四、SpringBoot中@ConfigurationProperties 属性注入

          使用Spring Boot提供的注解@ConfigurationProperties
          将Spring Boot的配置文件(默认必须为application.properties或application.yml)中的配置项读取到一个对象中

1、使用 @ConfigurationProperties需要引用坐标

    spring默认使用yml中的配置,但有时候要用传统的xml或properties配置,就需要使用spring-boot-configuration-processor了

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional> <!--不传递依赖-->
        </dependency>

2、在resources文件夹下,将jdbc.properties修改为 application.properties(名字是固定的)

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test
jdbc.username=root
jdbc.password=root

3、在代码文件夹,创建JdbcPropertis类,在该类名上面添加@ConfigurationProperties
     

          将Spring Boot的配置文件(默认必须为application.properties或application.yml)中的配置项读取到一个对象中。

注意:propertis配置件中key的名称 和 类中字段的名称 相同

package com.lt.config;

import org.springframework.boot.context.properties.ConfigurationProperties;

/**
 * @ConfigurationProperties 从application.properties 配置文件中读取配置项
 * prefix 配置项的前缀
 */
@ConfigurationProperties(prefix = "jdbc")
public class JdbcPropertis {
    private String driverClassName;
    private String url;
    private String username;
    private String password;

    public String getDriverClassName() {
        return driverClassName;
    }

    public void setDriverClassName(String driverClassName) {
        this.driverClassName = driverClassName;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

4、使用@EnableConfigurationProperties(JdbcPropertis.class),将JdbcPropertis 注入到配置类中

package com.lt.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;

import javax.sql.DataSource;

@Configuration
@EnableConfigurationProperties(JdbcPropertis.class) //配置项类
public class JdbcConfig {

    @Bean //注册数据源
    public DataSource dataSource(JdbcPropertis jdbcPropertis){
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(jdbcPropertis.getDriverClassName());
        dataSource.setUrl(jdbcPropertis.getUrl());
        dataSource.setUsername(jdbcPropertis.getUsername());
        dataSource.setPassword(jdbcPropertis.getPassword());
        return dataSource;
    }



}

五、SpringBoot 中更优雅的属性注入

如果属性只有一个Bean需要使用,我们无需将其注入到一个类(JdbcProperties,将该类上的所有注解去掉)中。
而直接在需要的方法声明即可

1、使用 @ConfigurationProperties需要引用坐标 

spring默认使用yml中的配置,但有时候要用传统的xml或properties配置,就需要使用spring-boot-configuration-processor了

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional> <!--不传递依赖-->
        </dependency>

2、在resources文件夹下,创建配置文件 application.properties(名字是固定的)

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test
jdbc.username=root
jdbc.password=root

3、编写配置类 JdbcConfig(注册数据源)

package com.lt.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;

import javax.sql.DataSource;

@Configuration
public class JdbcConfig {

    @Bean //注册数据源
    @ConfigurationProperties(prefix = "jdbc")
    public DataSource dataSource(){
        DruidDataSource dataSource = new DruidDataSource();
        return dataSource;
    }


}

4、Controller

package com.lt.Controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.sql.DataSource;

//@RestController 整合了@Controller 和 @ResponseBody
@RestController
public class HelloController {
    @Autowired
    private DataSource dataSource;
    @GetMapping("/hello")
    public String hello(){
        System.out.println("dataSource="+dataSource);
        return "hello ,Spring Boot!";
    }
}