SpringBoot 框架笔记

spring生态圈
在这里插入图片描述
在这里插入图片描述
springboot优势:
(1)创建独立spring应用
(2)嵌入web服务器
(3)自动starter依赖,简化构建配置
(4)自动配置spring及其第三方
(5)提供生产级别的监控、健康检查及外部化配置
(6)无代码生成、无效配置xml

SpringBoot是整合Spring技术栈的一站式框架
SpringBoot是简化Spring技术栈的快速开发脚手架

SpringBoot缺点
·人称版本帝,迭代快,需要时刻关注变化
封装太深,内部原理复杂,不容易精通

微服务
微服务是一种架构风格
一个应用拆分为一组小型服务
每个服务运行在自己的进程内,也就是可独立部署和升级
服务之间使用轻量级HTTP交互
服务围绕业务功能拆分
可以由全自动部署机制独立部署
去中心化,服务自治
服务可以使用不同的语言、不同的存储技术

分布式的困难·
远程调用
服务发现
负载均衡
服务容错
配置管理
服务监控
链路追踪
日志管理
任务调度
在这里插入图片描述
创建maven对象,引入相关依赖
在这里插入图片描述
在这里插入图片描述

看文档听课一定要认真!!少了依赖弄了很久才做出来

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.4.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
package com.hello;


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

/**
 * @author
 * @version 1.0
 */

/**
 * 主程序类
 * @SpringBootApplication 这是一个SpringBoot应用
 */
@SpringBootApplication
public class MainApplication {
    public static void main(String[] args) {
        SpringApplication.run(MainApplication.class,args);
    }
}

package com.hello.controller;

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

/**
 * @author
 * @version 1.0
 */
//@ResponseBody
//@Controller

@RestController
public class HelloController {

    @RequestMapping("/hello")
    public String handle(){
        return "hello,spring Boot 2!";
    }
}

打包

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${project.parent.version}</version>
            </plugin>
        </plugins>
    </build>

在这里插入图片描述
配置文件在一处修改
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
修改服务端口号
在这里插入图片描述
在这里插入图片描述

  <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <mysql.version>5.5.17</mysql.version>
    </properties>

在这里插入图片描述
在这里插入图片描述
无需写版本号,进行版本仲裁。
1、引入依赖默认都可以不写版本
2、引入非版本仲裁的jar,要写版本号。

自动配置·
自动配置Tomcat
。引入Tomcat依赖。
。配置Tomcat.

 <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-tomcat</artifactId>
      <version>2.3.4.RELEASE</version>
      <scope>compile</scope>
    </dependency>

自动配好SpringMVC
。 引入SpringMVC全套组件
。自动配好SpringMVC常用组件(功能)

关闭进程的命令
在这里插入图片描述
·自动配好Web常见功能,如:字符编码问题
SpringBoot帮我们配置好了所有web开发的常见场景
默认的包结构
主程序所在包及其下面的所有子包里面的组件都会被默认扫描进来。
无需以前的包扫描配置
在这里插入图片描述
·各种配置拥有默认值
·按需加载所有
自动配置项
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

package com.hello.controller;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ComponentScans;
import org.springframework.context.annotation.FilterType;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author
 * @version 1.0
 */
//@ResponseBody
//@Controller

@RestController
public class HelloController {

    @RequestMapping("/hello")
    public String handle(){
        return "hello,spring Boot 2!" + "你好";
    }

    /**
     * 主程序类
     * @SpringBootApplication 这是一个SpringBoot应用
     */
    //@SpringBootApplication(scanBasePackages = "com")

        @SpringBootConfiguration
        @EnableAutoConfiguration
        @ComponentScan(value = "com.hello")
        //在这儿指定包扫描路径
    public static class MainApplication {
        public static void main(String[] args) {
    //        SpringApplication.run(MainApplication.class,args);
    //        1.返回IOC容器
            ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args);
    //        2.查看容器里面的组件
    //        String[] beanDefinitionNames = run.getBeanDefinitionNames();
    //        for (String name:beanDefinitionNames){
    //            System.out.println(name);
    //        }
        }
    }
}

server.port=8080

spring.servlet.multipart.max-file-size=10MB

可以设置文件大小

·各种配置拥有默认值
。默认配置最终都是映射到MultipartProperties
。配置文件的值最终会绑定某个类上,这个类会在容器中创建对象

按需加载所有自动配置项。非常多的starter
。引入了哪些场景这个场景的自动配置才会开启
。SpringBoot所有的自动配置功能都在spring-boot-autoconfigure包里面

按需加载所有自动配置项。
。非常多的starter
。引入了哪些场景这个场景的自动配置才会开启
。 SpringBoot所有的自动配置功能都在spring-boot-autoconfigure包里面
在这里插入图片描述
在这里插入图片描述

package com.hello.bean;

/**
 * @author
 * @version 1.0
 */
public class User {

    private String name;
    private Integer age;

    private Pet pet;

    public Pet getPet() {
        return pet;
    }

    public void setPet(Pet pet) {
        this.pet = pet;
    }

    public User() {
    }

    public User(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

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

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", pet=" + pet +
                '}';
    }
}

package com.hello.bean;

/**
 * @author
 * @version 1.0
 */
public class Pet {

    private String name;

    public Pet() {
    }

    public Pet(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

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

    @Override
    public String toString() {
        return "Pet{" +
                "name='" + name + '\'' +
                '}';
    }
}

package com.hello.config;

import com.hello.bean.Pet;
import com.hello.bean.User;
import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author
 * @version 1.0
 * 1.配置类只能使用@Bean标注在方法上给容易注册组件,默认也是单实例的
 * 2.配置类本身也是主键
 * 3.proxyBeanMethods默认为true,代理Bean的方法
 * Fulll:全配置(proxyBeanMethods = true)
 * Lite:轻量级配置(proxyBeanMethods = false)
 * 组件依赖
 *
 * 如果不需要别人依赖组件,则将proxyBeanMethods调为false,启动springboot项目快
 */
//@Configuration(proxyBeanMethods = true)//告诉sprintBoot这是一个配置类 = 配置文件
@Configuration(proxyBeanMethods = false)
public class MyConfig {

    /**
     * 外部无论对配置类中的这个组件注朋方法调用多少次获取的都是之前注册容器中的单实例对象
     * @return
     */

    @Bean//给容器中添加组件,以方法名作为组件id,返回类型就是组件类型,返回的值,就是组件在容器中的实例
    public User user01(){
        User zhangsan = new User("zhangsan", 18);
//        User组件依赖了Pet组件
//        当是true模式时,依赖成立
        zhangsan.setPet(tomcatPet());
        return zhangsan;
    }

    @Bean("tom")
    public Pet tomcatPet(){
        return new Pet("tomcat");
    }
}

package com.hello;

import com.hello.bean.Pet;
import com.hello.bean.User;
import com.hello.config.MyConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.ComponentScan;

/**
 * @author
 * @version 1.0
 */

/**
 * 主程序类
 * @SpringBootApplication 这是一个SpringBoot应用
 */
//@SpringBootApplication(scanBasePackages = "com")
//在这儿指定包扫描路径
//@SpringBootConfiguration
//@EnableAutoConfiguration
//@ComponentScan(value = "com.hello")
    @SpringBootApplication
public class MainApplication {

        public static void main(String[] args) {
            //        SpringApplication.run(MainApplication.class,args);
            //        1.返回IOC容器
            ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args);
            //        2.查看容器里面的组件
//                    String[] beanDefinitionNames = run.getBeanDefinitionNames();
//                    for (String name:beanDefinitionNames){
//                        System.out.println(name);
//                    }

//                    3、从容器中获取组件  注册的主键默认是单实例的
            Pet tom01 = run.getBean("tom", Pet.class);
            Pet tom02 = run.getBean("tom", Pet.class);
            System.out.println("组件 :" + (tom01 == tom02));

            MyConfig bean = run.getBean(MyConfig.class);
            System.out.println(bean);

//            如果 @Configuration(proxyBeanMethods = true)代理对象调用方法
//            springboot总会检查组件在容器中是否有
//            保证组件是单实例对象
            User user = bean.user01();
            User user1 = bean.user01();
            System.out.println(user == user1);

            User user01 = run.getBean("user01", User.class);
            Pet tom = run.getBean("tom", Pet.class);

            System.out.println("用户的宠物" + (user01.getPet() == tom));

        }
}

在这里插入图片描述

package com.hello.config;

import ch.qos.logback.core.db.DBHelper;
import com.hello.bean.Pet;
import com.hello.bean.User;
import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;

/**
 * @author
 * @version 1.0
 * 1.配置类只能使用@Bean标注在方法上给容易注册组件,默认也是单实例的
 * 2.配置类本身也是主键
 * 3.proxyBeanMethods默认为true,代理Bean的方法
 * Fulll:全配置(proxyBeanMethods = true)
 * Lite:轻量级配置(proxyBeanMethods = false)
 * 组件依赖
 * FulL(proxyBeanMethods = true)、【保证每个@Bean方法被调用多少次返回的组件都是单实例的】
 * lite(proxyBeanMethods = false)【每个@Bean方法被调用多少次返回的组件都是新创建的】
 * 组件依预必须使用FuLL模式默认。其他默认是香Lite模式
 * 如果不需要别人依赖组件,则将proxyBeanMethods调为false,启动springboot项目快
 *
 * 4.@Import({User.class, DBHelper.class})
 * 给容器中自动创建出这两个类型的组件\默认组件的名称是全类名
 * 
 */


@Import({User.class, DBHelper.class})
//@Configuration(proxyBeanMethods = true)//告诉sprintBoot这是一个配置类 = 配置文件
@Configuration(proxyBeanMethods = false)
public class MyConfig {

    /**
     * 外部无论对配置类中的这个组件注朋方法调用多少次获取的都是之前注册容器中的单实例对象
     * @return
     */

    @Bean//给容器中添加组件,以方法名作为组件id,返回类型就是组件类型,返回的值,就是组件在容器中的实例
    public User user01(){
        User zhangsan = new User("zhangsan", 18);
//        User组件依赖了Pet组件
//        当是true模式时,依赖成立
        zhangsan.setPet(tomcatPet());
        return zhangsan;
    }

    @Bean("tom")
    public Pet tomcatPet(){
        return new Pet("tomcat");
    }
}

package com.hello;

import ch.qos.logback.core.db.DBHelper;
import com.hello.bean.Pet;
import com.hello.bean.User;
import com.hello.config.MyConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.ComponentScan;

/**
 * @author
 * @version 1.0
 */

/**
 * 主程序类
 * @SpringBootApplication 这是一个SpringBoot应用
 */
//@SpringBootApplication(scanBasePackages = "com")
//在这儿指定包扫描路径
//@SpringBootConfiguration
//@EnableAutoConfiguration
//@ComponentScan(value = "com.hello")
    @SpringBootApplication
public class MainApplication {

        public static void main(String[] args) {
            //        SpringApplication.run(MainApplication.class,args);
            //        1.返回IOC容器
            ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args);
            //        2.查看容器里面的组件
//                    String[] beanDefinitionNames = run.getBeanDefinitionNames();
//                    for (String name:beanDefinitionNames){
//                        System.out.println(name);
//                    }

//                    3、从容器中获取组件  注册的主键默认是单实例的
            Pet tom01 = run.getBean("tom", Pet.class);
            Pet tom02 = run.getBean("tom", Pet.class);
            System.out.println("组件 :" + (tom01 == tom02));

            MyConfig bean = run.getBean(MyConfig.class);
            System.out.println(bean);

//            如果 @Configuration(proxyBeanMethods = true)代理对象调用方法
//            springboot总会检查组件在容器中是否有
//            保证组件是单实例对象
            User user = bean.user01();
            User user1 = bean.user01();
            System.out.println(user == user1);

            User user01 = run.getBean("user01", User.class);
            Pet tom = run.getBean("tom", Pet.class);

            System.out.println("用户的宠物" + (user01.getPet() == tom));

//            5.容器中获取组件
            String[] beanNamesForType = run.getBeanNamesForType(User.class);
            System.out.println("====================");
            for (String s : beanNamesForType){
                System.out.println(s);
            }

            DBHelper bean1 = run.getBean(DBHelper.class);
            System.out.println(bean1);
        }
}

在这里插入图片描述
在这里插入图片描述
beans的申明,configure xml 文件的

<?xml version="1.0" encoding="utf-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">

<!--    <bean id = "user01" class = "com.hello.bean.User">-->
<!--        <property name = "name" value = "zhangsan"></property>-->
<!--        <property name = "age" value="15"></property>-->
<!--    </bean>-->

<!--    <bean id = "cat" class="com.hello.bean.Pet">-->
<!--        <property name = "name" value="tomcat"></property>-->
<!--    </bean>-->

    <bean id="haha" class="com.hello.bean.User">
        <property name="name" value="zhangsan"></property>
        <property name="age" value="12"></property>
    </bean>

    <bean id="hehe" class="com.hello.bean.Pet">
        <property name="name" value="tomcat"></property>
    </bean>

</beans>
package com.hello.config;

import ch.qos.logback.core.db.DBHelper;
import com.hello.bean.Pet;
import com.hello.bean.User;
import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.ImportResource;

/**
 * @author
 * @version 1.0
 * 1.配置类只能使用@Bean标注在方法上给容易注册组件,默认也是单实例的
 * 2.配置类本身也是主键
 * 3.proxyBeanMethods默认为true,代理Bean的方法
 * Fulll:全配置(proxyBeanMethods = true)
 * Lite:轻量级配置(proxyBeanMethods = false)
 * 组件依赖
 * FulL(proxyBeanMethods = true)、【保证每个@Bean方法被调用多少次返回的组件都是单实例的】
 * lite(proxyBeanMethods = false)【每个@Bean方法被调用多少次返回的组件都是新创建的】
 * 组件依预必须使用FuLL模式默认。其他默认是香Lite模式
 * 如果不需要别人依赖组件,则将proxyBeanMethods调为false,启动springboot项目快
 *
 * 4.@Import({User.class, DBHelper.class})
 * 给容器中自动创建出这两个类型的组件\默认组件的名称是全类名
 *
 * 5.@ImportResource("classpath:beans.xml") 导入spring配置文件,让其生效
 */


@Import({User.class, DBHelper.class})
//@Configuration(proxyBeanMethods = true)//告诉sprintBoot这是一个配置类 = 配置文件
@Configuration(proxyBeanMethods = false)

//@ConditionalOnBean(name = "tom")  //条件装配
//@ConditionalOnMissingBean(name = "tom")

@ImportResource("classpath:beans.xml")
public class MyConfig {

    /**
     * 外部无论对配置类中的这个组件注朋方法调用多少次获取的都是之前注册容器中的单实例对象
     * @return
     */

//    @ConditionalOnBean(name = "tom")//当容器中有tom组件时,才注册user01组件
    @Bean//给容器中添加组件,以方法名作为组件id,返回类型就是组件类型,返回的值,就是组件在容器中的实例
    public User user01(){
        User zhangsan = new User("zhangsan", 18);
//        User组件依赖了Pet组件
//        当是true模式时,依赖成立
        zhangsan.setPet(tomcatPet());
        return zhangsan;
    }

//    @Bean("tom")
    public Pet tomcatPet(){
        return new Pet("tomcat");
    }
}

package com.hello;

import ch.qos.logback.core.db.DBHelper;
import com.hello.bean.Pet;
import com.hello.bean.User;
import com.hello.config.MyConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.ComponentScan;

/**
 * @author
 * @version 1.0
 */

/**
 * 主程序类
 * @SpringBootApplication 这是一个SpringBoot应用
 */
//@SpringBootApplication(scanBasePackages = "com")
//在这儿指定包扫描路径
//@SpringBootConfiguration
//@EnableAutoConfiguration
//@ComponentScan(value = "com.hello")
    @SpringBootApplication
public class MainApplication {

        public static void main(String[] args) {
            //        SpringApplication.run(MainApplication.class,args);
            //        1.返回IOC容器
            ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args);
//            //        2.查看容器里面的组件
                    String[] beanDefinitionNames = run.getBeanDefinitionNames();
                    for (String name:beanDefinitionNames){
                        System.out.println(name);
                    }
//
                    3、从容器中获取组件  注册的主键默认是单实例的
//            Pet tom01 = run.getBean("tom", Pet.class);
//            Pet tom02 = run.getBean("tom", Pet.class);
//            System.out.println("组件 :" + (tom01 == tom02));
//
//            MyConfig bean = run.getBean(MyConfig.class);
//            System.out.println(bean);
//
            如果 @Configuration(proxyBeanMethods = true)代理对象调用方法
            springboot总会检查组件在容器中是否有
            保证组件是单实例对象
//            User user = bean.user01();
//            User user1 = bean.user01();
//            System.out.println(user == user1);
//
//            User user01 = run.getBean("user01", User.class);
//            Pet tom = run.getBean("tom", Pet.class);
//
//            System.out.println("用户的宠物" + (user01.getPet() == tom));
//
            5.容器中获取组件
//            String[] beanNamesForType = run.getBeanNamesForType(User.class);
//            System.out.println("====================");
//            for (String s : beanNamesForType){
//                System.out.println(s);
//            }
//
//            DBHelper bean1 = run.getBean(DBHelper.class);
//            System.out.println(bean1);

            boolean tom = run.containsBean("tom");
            System.out.println("容器中Tom组件:" + tom);

            System.out.println(run.containsBean("user01"));

            boolean haha = run.containsBean("haha");
            boolean hehe = run.containsBean("hehe");
            System.out.println(haha);
            System.out.println(hehe);
        }
}

在application.properties中配置的属性

mycar.brand=BYD
mycar.price=100000

两种方式绑定
第一种:
自动加载到容器中

package com.hello.bean;

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

/**
 * @author
 * @version 1.0
 */

/**
 * 只有在容器中的组件才会有springboot提供的强大功能
 */
@Component//加到容器中
@ConfigurationProperties(prefix = "mycar")
public class Car {

    private String brand;
    private Integer price;

    public String getBrand() {
        return brand;
    }

    public void setBrand(String brand) {
        this.brand = brand;
    }

    public Integer getPrice() {
        return price;
    }

    public void setPrice(Integer price) {
        this.price = price;
    }

    @Override
    public String toString() {
        return "Car{" +
                "brand='" + brand + '\'' +
                ", price=" + price +
                '}';
    }
}

  @Autowired
    Car car;

    @RequestMapping("/car")
    public Car car(){
        return  car;
    }

第二种:开启属性绑定功能
必须写在config配置文件中
@EnableConfigurationProperties(Car.class)//开启Car属性配置功能;把组件Car自动注册到容器中
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
文件里面写死了spring-boot一启动就要给容器中加载的所有配置类

# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\
org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\
org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration,\
org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration,\
org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfiguration,\
org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration,\
org.springframework.boot.autoconfigure.context.LifecycleAutoConfiguration,\
org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration,\
org.springframework.boot.autoconfigure.couchbase.CouchbaseAutoConfiguration,\
org.springframework.boot.autoconfigure.dao.PersistenceExceptionTranslationAutoConfiguration,\
org.springframework.boot.autoconfigure.data.cassandra.CassandraDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.cassandra.CassandraReactiveDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.cassandra.CassandraReactiveRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.cassandra.CassandraRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.couchbase.CouchbaseDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.couchbase.CouchbaseReactiveDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.couchbase.CouchbaseReactiveRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.couchbase.CouchbaseRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.elasticsearch.ReactiveElasticsearchRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.elasticsearch.ReactiveElasticsearchRestClientAutoConfiguration,\
org.springframework.boot.autoconfigure.data.jdbc.JdbcRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.jpa.JpaRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.ldap.LdapRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.mongo.MongoReactiveDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.mongo.MongoReactiveRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.mongo.MongoRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.neo4j.Neo4jDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.neo4j.Neo4jRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.solr.SolrRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.r2dbc.R2dbcDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.r2dbc.R2dbcRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.r2dbc.R2dbcTransactionManagerAutoConfiguration,\
org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration,\
org.springframework.boot.autoconfigure.data.redis.RedisReactiveAutoConfiguration,\
org.springframework.boot.autoconfigure.data.redis.RedisRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.rest.RepositoryRestMvcAutoConfiguration,\
org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration,\
org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientAutoConfiguration,\
org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration,\
org.springframework.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration,\
org.springframework.boot.autoconfigure.groovy.template.GroovyTemplateAutoConfiguration,\
org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration,\
org.springframework.boot.autoconfigure.h2.H2ConsoleAutoConfiguration,\
org.springframework.boot.autoconfigure.hateoas.HypermediaAutoConfiguration,\
org.springframework.boot.autoconfigure.hazelcast.HazelcastAutoConfiguration,\
org.springframework.boot.autoconfigure.hazelcast.HazelcastJpaDependencyAutoConfiguration,\
org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration,\
org.springframework.boot.autoconfigure.http.codec.CodecsAutoConfiguration,\
org.springframework.boot.autoconfigure.influx.InfluxDbAutoConfiguration,\
org.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration,\
org.springframework.boot.autoconfigure.integration.IntegrationAutoConfiguration,\
org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.JndiDataSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.XADataSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration,\
org.springframework.boot.autoconfigure.jms.JmsAutoConfiguration,\
org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration,\
org.springframework.boot.autoconfigure.jms.JndiConnectionFactoryAutoConfiguration,\
org.springframework.boot.autoconfigure.jms.activemq.ActiveMQAutoConfiguration,\
org.springframework.boot.autoconfigure.jms.artemis.ArtemisAutoConfiguration,\
org.springframework.boot.autoconfigure.jersey.JerseyAutoConfiguration,\
org.springframework.boot.autoconfigure.jooq.JooqAutoConfiguration,\
org.springframework.boot.autoconfigure.jsonb.JsonbAutoConfiguration,\
org.springframework.boot.autoconfigure.kafka.KafkaAutoConfiguration,\
org.springframework.boot.autoconfigure.availability.ApplicationAvailabilityAutoConfiguration,\
org.springframework.boot.autoconfigure.ldap.embedded.EmbeddedLdapAutoConfiguration,\
org.springframework.boot.autoconfigure.ldap.LdapAutoConfiguration,\
org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration,\
org.springframework.boot.autoconfigure.mail.MailSenderAutoConfiguration,\
org.springframework.boot.autoconfigure.mail.MailSenderValidatorAutoConfiguration,\
org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoAutoConfiguration,\
org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration,\
org.springframework.boot.autoconfigure.mongo.MongoReactiveAutoConfiguration,\
org.springframework.boot.autoconfigure.mustache.MustacheAutoConfiguration,\
org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration,\
org.springframework.boot.autoconfigure.quartz.QuartzAutoConfiguration,\
org.springframework.boot.autoconfigure.r2dbc.R2dbcAutoConfiguration,\
org.springframework.boot.autoconfigure.rsocket.RSocketMessagingAutoConfiguration,\
org.springframework.boot.autoconfigure.rsocket.RSocketRequesterAutoConfiguration,\
org.springframework.boot.autoconfigure.rsocket.RSocketServerAutoConfiguration,\
org.springframework.boot.autoconfigure.rsocket.RSocketStrategiesAutoConfiguration,\
org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration,\
org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration,\
org.springframework.boot.autoconfigure.security.servlet.SecurityFilterAutoConfiguration,\
org.springframework.boot.autoconfigure.security.reactive.ReactiveSecurityAutoConfiguration,\
org.springframework.boot.autoconfigure.security.reactive.ReactiveUserDetailsServiceAutoConfiguration,\
org.springframework.boot.autoconfigure.security.rsocket.RSocketSecurityAutoConfiguration,\
org.springframework.boot.autoconfigure.security.saml2.Saml2RelyingPartyAutoConfiguration,\
org.springframework.boot.autoconfigure.sendgrid.SendGridAutoConfiguration,\
org.springframework.boot.autoconfigure.session.SessionAutoConfiguration,\
org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientAutoConfiguration,\
org.springframework.boot.autoconfigure.security.oauth2.client.reactive.ReactiveOAuth2ClientAutoConfiguration,\
org.springframework.boot.autoconfigure.security.oauth2.resource.servlet.OAuth2ResourceServerAutoConfiguration,\
org.springframework.boot.autoconfigure.security.oauth2.resource.reactive.ReactiveOAuth2ResourceServerAutoConfiguration,\
org.springframework.boot.autoconfigure.solr.SolrAutoConfiguration,\
org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration,\
org.springframework.boot.autoconfigure.task.TaskSchedulingAutoConfiguration,\
org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration,\
org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration,\
org.springframework.boot.autoconfigure.transaction.jta.JtaAutoConfiguration,\
org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration,\
org.springframework.boot.autoconfigure.web.client.RestTemplateAutoConfiguration,\
org.springframework.boot.autoconfigure.web.embedded.EmbeddedWebServerFactoryCustomizerAutoConfiguration,\
org.springframework.boot.autoconfigure.web.reactive.HttpHandlerAutoConfiguration,\
org.springframework.boot.autoconfigure.web.reactive.ReactiveWebServerFactoryAutoConfiguration,\
org.springframework.boot.autoconfigure.web.reactive.WebFluxAutoConfiguration,\
org.springframework.boot.autoconfigure.web.reactive.error.ErrorWebFluxAutoConfiguration,\
org.springframework.boot.autoconfigure.web.reactive.function.client.ClientHttpConnectorAutoConfiguration,\
org.springframework.boot.autoconfigure.web.reactive.function.client.WebClientAutoConfiguration,\
org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration,\
org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryAutoConfiguration,\
org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration,\
org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration,\
org.springframework.boot.autoconfigure.web.servlet.MultipartAutoConfiguration,\
org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration,\
org.springframework.boot.autoconfigure.websocket.reactive.WebSocketReactiveAutoConfiguration,\
org.springframework.boot.autoconfigure.websocket.servlet.WebSocketServletAutoConfiguration,\
org.springframework.boot.autoconfigure.websocket.servlet.WebSocketMessagingAutoConfiguration,\
org.springframework.boot.autoconfigure.webservices.WebServicesAutoConfiguration,\
org.springframework.boot.autoconfigure.webservices.client.WebServiceTemplateAutoConfiguration

查看有多少组件
int beanDefinitionCount = run.getBeanDefinitionCount();
System.out.println(beanDefinitionCount);在这里插入图片描述
在这里插入图片描述

String[] beanNamesForType = run.getBeanNamesForType(CacheAspectSupport.class);
System.out.println("=============" + beanNamesForType.length);

在这里插入图片描述
给容器加入了文件上传解析器

SpringBoot默认会在底层配好所有的组件。但是如果用户自己配置了以用户的优先
在这里插入图片描述
总结:
. SpringBoot先加载所有的自动配置类
。每个自动;配置类按照条件进行生效,默认都会绑定配置文件指定的值。XxxxProperties里面拿。xxxProperties和配置文件进行了绑定
。生效的配置类就会给容器中装配很多组件
。只要容器中有这些组件,相当于这些功能就有了
。只要用户有自己配置的,就以用户的优先
。定制化配置
。用户直接自己@Bean替换底层的组件
。用户去看这个组件是获取的配置文件什么值就去修改。

xxogxAutoConfiguration —>组件—> xxxxProperties里面拿值----> application.properties

开启debug模式
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
1.引入依赖

  <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

2.下载插件lombok
3.修改代码

package com.hello.bean;

import lombok.Data;
import lombok.ToString;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * @author
 * @version 1.0
 */

/**
 * 只有在容器中的组件才会有springboot提供的强大功能
 */

@ToString//生成toString方法
@Data//生成getset方法
@Component//加到容器中
@ConfigurationProperties(prefix = "mycar")
public class Car {

    private String brand;
    private Integer price;

//    public String getBrand() {
//        return brand;
//    }
//
//    public void setBrand(String brand) {
//        this.brand = brand;
//    }
//
//    public Integer getPrice() {
//        return price;
//    }
//
//    public void setPrice(Integer price) {
//        this.price = price;
//    }

//    @Override
//    public String toString() {
//        return "Car{" +
//                "brand='" + brand + '\'' +
//                ", price=" + price +
//                '}';
//    }
}

package com.hello.bean;

import lombok.*;

/**
 * @author
 * @version 1.0
 */

@Data
@ToString
//@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode
public class User {

    private String name;
    private Integer age;

    private Pet pet;

//    public Pet getPet() {
//        return pet;
//    }
//
//    public void setPet(Pet pet) {
//        this.pet = pet;
//    }
//
//    public User() {
//    }

    public User(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

//    public String getName() {
//        return name;
//    }
//
//    public void setName(String name) {
//        this.name = name;
//    }
//
//    public Integer getAge() {
//        return age;
//    }
//
//    public void setAge(Integer age) {
//        this.age = age;
//    }
//
//    @Override
//    public String toString() {
//        return "User{" +
//                "name='" + name + '\'' +
//                ", age=" + age +
//                ", pet=" + pet +
//                '}';
//    }
}

package com.hello.bean;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;

/**
 * @author
 * @version 1.0
 */

@NoArgsConstructor//无参构造器
@AllArgsConstructor//全参构造器
@Data
@ToString
public class Pet {

    private String name;

//    public Pet() {
//    }
//
//    public Pet(String name) {
//        this.name = name;
//    }

//    public String getName() {
//        return name;
//    }
//
//    public void setName(String name) {
//        this.name = name;
//    }
//
//    @Override
//    public String toString() {
//        return "Pet{" +
//                "name='" + name + '\'' +
//                '}';
//    }
}

在这里插入图片描述

package com.hello.controller;


import com.hello.bean.Car;
import lombok.extern.slf4j.Slf4j;
import lombok.extern.slf4j.XSlf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author
 * @version 1.0
 */
//@ResponseBody
//@Controller

@Slf4j
@RestController
public class HelloController {

    @Autowired
    Car car;

    @RequestMapping("/car")
    public Car car(){
        return  car;
    }

    @RequestMapping("/hello")
    public String handle(@RequestParam("name") String name){

        log.info("请求进来啦、、、、、");
        return "hello,spring Boot 2!" + "你好:" + name;
    }
}

在这里插入图片描述


<?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>org.example</groupId>
    <artifactId>maven_study</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
<!--        <mysql.version>5.5.17</mysql.version>-->
    </properties>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.4.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>

<!--        <dependency>-->
<!--            <groupId>mysql</groupId>-->
<!--            <artifactId>mysql-connector-java</artifactId>-->
<!--        </dependency>-->

    </dependencies>



    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${project.parent.version}</version>
            </plugin>
        </plugins>
    </build>

</project>

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
项目初始化向导
在这里插入图片描述
配置文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
当添加的依赖爆红,在下面添加版本号

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<version>2.3.4.RELEASE</version>
			<scope>test</scope>
		</dependency>

在这里插入图片描述

package com.example.demo.bean;

import lombok.Data;
import lombok.ToString;

import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * @author
 * @version 1.0
 */
@ConfigurationProperties(prefix = "person")
@Component
 @ToString
@Data
public class Person {

    private String userName;
    private Boolean boss;
    private Date birth;
    private Integer age;
    private Pet pet;
    private String[] interests;
    private List<String> animal;
    private Map<String,Object> score;
    private Set<Double> salarys;
    private Map<String,List<Pet>> allPets;
}

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值