关于SpringBoot原理的学习总结

1. starter

⼀个 starter 就是⼀个开发场景的⽀持( 依赖 + 配置)
SpringBoot 为我们提供了简化企业级开发绝⼤多数场景的⽀持(提供了多个 starter ),我们在进⾏项⽬开发 的过程中只需引⼊对应的starter (创建 SpringBoot 应⽤时可选择),相关的依赖和配置就会被内置到项⽬中 (消除⼈⼯配置)。
对于Spring官方Starter,只需在pom.xml配置文件中增加对于Starter的依赖,这个Starter就能够通过代码配置上下文发现并将所需要jar包进行关联,在自动配置类中可以通过@ConditionalOnClass来决定是否实例化(ConditionalOnClass是指在classpath发现需要的依赖的类时实例化)。

1.1starter依赖

⼀个 starter 依赖表示的不是⼀个依赖,⽽是某种开发环境所需的⼀组依赖
Spring Web --- spring-boot-starter-web
MyBatis Framework --- mybatis-spring-boot-starter

1.2 starter配置

⼀个 starter 不仅包含所需依赖,还包含了其所需的对应的配置
        MyBatis Framework --- mybatis-spring-boot-starter

                依赖:

                 配置:

 1.3 一个案例(引入redis开发场景)

添加starter依赖

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency

service中可以直接注⼊redis客户端

@Service
public class UserServiceImpl implements UserService {
    @Resource
    private UserDAO userDAO;

    @Resource
    private StringRedisTemplate stringRedisTemplate;
}

2. SpringBoot应用的pom文件

2.1基于Spring官⽅服务器创建的SpringBoot应⽤

继承spring-boot-starter-parent.pom

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-
4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>
 
     <!-- SpringBoot应⽤中的pom 继承了spring-boot-starter-parent.pom -->
     <!-- spring-boot-starter-parent.pom⼜继承了spring-boot-dependencies.pom-->
     <!-- 在spring-boot-dependencies.pom已经对主流的框架的版本进⾏了声明 -->
 <parent>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-parent</artifactId>
     <version>2.4.4</version>
 <relativePath/>
 </parent>
 
</project>

引⼊了mavenspringboot应⽤⽀持的插件 spring-boot

<build>
     <plugins>
         <plugin>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-maven-plugin</artifactId>
             <configuration>
                <mainClass>com.qfedu.springboot.demo.SpringbootDemo1Application</mainClass>
                <excludes>
                     <exclude>
                         <groupId>org.projectlombok</groupId>
                         <artifactId>lombok</artifactId>
                     </exclude>
                 </excludes>
             </configuration>
         </plugin>
     </plugins>
</build>

2.2基于ali服务器创建的SpringBoot应⽤

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.qfedu</groupId>
    <artifactId>springboot-demo2</artifactId>
    <version>1.0.0</version>
    <name>springboot-demo2</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<!--SpringBoot引⽤的pom没有继承spring-boot-starter-parent.pom,因此版本需要在当前pom中进⾏定义 -->
        <spring-boot.version>2.3.7.RELEASE</spring-boot.version>
    </properties>

    <build>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>2.3.7.RELEASE</version>
            <configuration>
 
<mainClass>com.qfedu.springboot.demo2.SpringbootDemo2Application</mainClass>
            </configuration>
            <executions>
                 <execution>
                     <id>repackage</id>
                     <goals>
                        <goal>repackage</goal>
                     </goals>
                </execution>
            </executions>
            </plugin>
        </plugins>
    </build>
</project>

3. java的配置方式

如果我们需要在 SpringBoot 应⽤中整合⼀种新的开发场景,只需在 pom.xml 引⼊对应的 starter 即可
⼀个 starter 不仅包含依赖,还包含相应的配置, starter 中包含的配置都是通过 Java 类实现的 ——Java 配置⽅式

3.1 Spring版本发展(随着Spring版本的迭代,配置⽅式也在发⽣变化

 3.2 xml配置

<!--applicationContext.xml-->
<bean id="stu" class="com.qfedu.beans.Student"></bean>
<bean id="date" class="java.util.Date"></bean>

3.3 注解配置

@Component
public class Student{
 
}

3.4 java配置方式

创建类配置

@Configuration
public class SpringConfig{
 
    @Bean
    public Date getDate(){
        return new Date();
    }
}

4. SpringBoot⾃动配置

我们都知道 自动配置是SpringBoot框架最为核心也是最精髓的一点 当你开始创建整个springboot项目的主启动类 并启动它的时候 它就自动的将所有你需要配置的给自动配置了,也导入了相应的组件进入IOC容器,省去了我们之前手动去xml文件里各种繁琐的配置,大大的提高了我们项目环境搭建的效率,并且如果你不满意框架给你的配置,你可以通过它的全局配置文件yml或者propertise来进行修改它的默认配置。

 5. 全局配置文件

SpringBoot针对不同的开发场景提供默认的属性配置,如果默认的配置不能满⾜开发的需要,我们需要对属 性配置进⾏修改

SpringBoot 应⽤提供了⼀个全局配置⽂件 application.properties ⽤于进⾏⾃定义配置
全局配置⽂件⽀持 2中语法配置:    properties 键值对配置
                                                        yaml 语法的配置

5.1 基于properties配置

# 配置数据源 (key必须按照SpringBoot的要求)
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/db_2010_mybatis?characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=admin123
# 配置映射⽂件路径及实体类的包名
mybatis.mapper-locations=classpath:mappers/*Mapper.xml
mybatis.type-aliases-package=com.qfedu.springboot.demo.entity

5.2 基于yaml配置

spring:
    datasource:
        url: jdbc:mysql://localhost:3306/db_2010_mybatis?characterEncoding=utf-8
        driver-class-name: com.mysql.jdbc.Driver
        username: root
        password: admin123
mybatis:
    mapper-locations: classpath:mappers/*Mapper.xml
    type-aliases-package: com.qfedu.springboot.demo.entity

5.3 常用全局配置

server:
 port: 9999
 servlet:
 context-path: /demo1

6. ⾃定义Banner

SpringBoot 应⽤启动的时候是有⼀个默认启动图案的
这个默认图案⽀持⾃定义配置
resources ⽬录创建⼀个 banner.txt
banner.txt ⽂件中定义图案 http://patorjk.com/software/taag/

佛祖保佑

//                            _ooOoo_  
//                           o8888888o  
//                           88" . "88  
//                           (| -_- |)  
//                            O\ = /O  
//                        ____/`---'\____  
//                      .   ' \\| |// `.  
//                       / \\||| : |||// \  
//                     / _||||| -:- |||||- \  
//                       | | \\\ - /// | |  
//                     | \_| ''\---/'' | |  
//                      \ .-\__ `-` ___/-. /  
//                   ___`. .' /--.--\ `. . __  
//                ."" '< `.___\_<|>_/___.' >'"".  
//               | | : `- \`.;`\ _ /`;.`/ - ` : | |  
//                 \ \ `-. \_ __\ /__ _/ .-` / /  
//         ======`-.____`-.___\_____/___.-`____.-'======  
//                            `=---='  
//  
//         .............................................  
//                  佛祖保佑             永无BUG 
//          佛曰:  
//                  写字楼里写字间,写字间里程序员;  
//                  程序人员写程序,又拿程序换酒钱。  
//                  酒醒只在网上坐,酒醉还来网下眠;  
//                  酒醉酒醒日复日,网上网下年复年。  
//                  但愿老死电脑间,不愿鞠躬老板前;  
//                  奔驰宝马贵者趣,公交自行程序员。  
//                  别人笑我忒疯癫,我笑自己命太贱;  
//                  不见满街漂亮妹,哪个归得程序员?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容,可以得出以下结论: Spring Boot的自动装配原理可以通过查看spring.factories文件来了解。该文件位于spring-boot-autoconfigure-2.5.4.jar包的META-INF目录下。在启动过程中,Spring Boot会根据spring.factories文件中配置的自动配置类的全类名来加载对应的配置类。如果配置类中的@ConditionalOnxxx注解满足条件,则会加载该配置类。\[1\] 如果想深入了解自动装配的原理,可以在源码中进行跟踪和研究。了解自动装配后,可以更好地理解yaml配置的过程,并在源码中找到可以配置的属性。\[3\] 在学习Spring Boot之前,建议先具备SpringSpring MVC的基础知识。Spring Boot的目的是简化新Spring应用的搭建和开发过程,它使用特定的配置方式,使开发人员不再需要定义样板化的配置。\[4\] 对于集成特定模块,比如Freemarker,Spring Boot提供了自动集成的功能。只需要导入相应的starter包,就会自动实现注入。例如,集成Freemarker可以通过导入FreeMarkerAutoConfiguration来实现。\[5\] 综上所述,Spring Boot的自动装配原理可以通过查看spring.factories文件来了解,同时可以在源码中进行深入研究。在学习之前,建议具备SpringSpring MVC的基础知识。对于特定模块的集成,Spring Boot提供了自动集成的功能。 #### 引用[.reference_title] - *1* [springboot自动装配原理笔记一](https://blog.csdn.net/JieZhongBa/article/details/120378592)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *4* *5* [导图梳理springboot手动、自动装配,让springboot不再难懂](https://blog.csdn.net/b644ROfP20z37485O35M/article/details/102029574)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [SpringBoot思维导图(知识点总结)](https://blog.csdn.net/weixin_38378034/article/details/115432455)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值