SpringBoot


SpringBoot 原理篇


文章目录

  • SpringBoot
  • SpringBoot 原理篇
  • 1 自动配置
  • 1.1 bean 的加载方式【一】
  • 1.1.1 环境准备
  • 1.1.2 第一种方式
  • 1.1.3 第三方bean


1 自动配置

1.1 bean 的加载方式【一】
1.1.1 环境准备

创建一个新的工程模块【Maven 的,不是SpringBoot 的】

springboot 本地配置 重新加载 springboot配置加载流程_spring

直接创建

springboot 本地配置 重新加载 springboot配置加载流程_spring_02

OK,一个全新的Maven 工程

【添加坐标】

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.3.23</version>
    </dependency>
</dependencies>

springboot 本地配置 重新加载 springboot配置加载流程_spring boot_03

记得刷一下

创建新的bean 类

springboot 本地配置 重新加载 springboot配置加载流程_spring boot_04

再整一套业务层的东西

业务层接口

package com.dingjiaxiong.service;

/**
 * ClassName: BookService
 * date: 2022/10/24 10:34
 *
 * @author DingJiaxiong
 */
public interface BookService {
    
    void check();
}

实现类

package com.dingjiaxiong.service.impl;

import com.dingjiaxiong.service.BookService;

/**
 * ClassName: BookServiceImpl1
 * date: 2022/10/24 10:35
 *
 * @author DingJiaxiong
 */


public class BookServiceImpl1 implements BookService {


    @Override
    public void check() {
        System.out.println("book service 1..");
    }
}

复制出三个差不多的实现类

package com.dingjiaxiong.service.impl;

import com.dingjiaxiong.service.BookService;

/**
 * ClassName: BookServiceImpl1
 * date: 2022/10/24 10:35
 *
 * @author DingJiaxiong
 */


public class BookServiceImpl2 implements BookService {


    @Override
    public void check() {
        System.out.println("book service 2....");
    }
}
package com.dingjiaxiong.service.impl;

import com.dingjiaxiong.service.BookService;

/**
 * ClassName: BookServiceImpl1
 * date: 2022/10/24 10:35
 *
 * @author DingJiaxiong
 */


public class BookServiceImpl3 implements BookService {


    @Override
    public void check() {
        System.out.println("book service 3......");
    }
}
package com.dingjiaxiong.service.impl;

import com.dingjiaxiong.service.BookService;

/**
 * ClassName: BookServiceImpl1
 * date: 2022/10/24 10:35
 *
 * @author DingJiaxiong
 */


public class BookServiceImpl4 implements BookService {


    @Override
    public void check() {
        System.out.println("book service 4........");
    }
}

springboot 本地配置 重新加载 springboot配置加载流程_java_05

这样儿差不多准备工作就完成了

1.1.2 第一种方式

Spring 刚出现的时候,它提供的最早的bean 的声明方式就是通过xml 的方式进行声明

来一个配置文件

springboot 本地配置 重新加载 springboot配置加载流程_java_06

<?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">

    <!--  通过xml的方式声明自己开发的bean  -->
    <bean id="cat" class="com.dingjiaxiong.bean.Cat"/>
</beans>

编写程序运行它

package com.dingjiaxiong.app;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * ClassName: App1
 * date: 2022/10/24 10:43
 *
 * @author DingJiaxiong
 */

public class App1 {

    public static void main(String[] args) {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext1.xml");
        Object cat = ctx.getBean("cat");
        System.out.println(cat);
    }

}

运行结果

springboot 本地配置 重新加载 springboot配置加载流程_spring_07

这就可以说明cat 这个bean 已经初始化成功了

当然定义时其实也可以不用写 id

<!--  不写id  -->
<bean class="com.dingjiaxiong.bean.Dog"/>

springboot 本地配置 重新加载 springboot配置加载流程_spring_08

OK,直接拿一下

Dog dog = ctx.getBean(Dog.class);
System.out.println(dog);

运行结果

springboot 本地配置 重新加载 springboot配置加载流程_System_09

OK,没毛病

还有一个小操作,可以一次性到位

String[] names = ctx.getBeanDefinitionNames();
for (String name : names) {
    System.out.println(name);
}

执行结果

springboot 本地配置 重新加载 springboot配置加载流程_xml_10

cat 是配置文件中bean的id,下面的狗是一个全路径的类名,后面还跟着一个 #0 ,意思就是编号,如果我有四个

springboot 本地配置 重新加载 springboot配置加载流程_java_11

就是这样

1.1.3 第三方bean

添加一个依赖坐标

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.2.11</version>
</dependency>

springboot 本地配置 重新加载 springboot配置加载流程_spring_12

<!--  xml方式声明第三方开发的bean  -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"/>

同样直接运行

springboot 本地配置 重新加载 springboot配置加载流程_spring boot_13

OK,xml 方式声明bean 差不多就是这样,

回顾一下

  • XML方式声明bean

springboot 本地配置 重新加载 springboot配置加载流程_System_14

这种方式的优点:

  • 全在一个文件中,一目了然

缺点:

  • 写起来麻烦