Javaweb学习笔记——后端实战8 springboot原理

1、配置优先级

如果在以下三种配置下,测试他们的优先级:

同时代码测试发现:properties>yml>yaml的优先级

之后命令行参数的优先级>java系统属性优先级!

如果以上5个都存在,优先级:命令行参数>java系统属性>properties>yml>yaml

2、Bean管理

在对象中循环输出1000次对象名后发现输出的是同一个对象,这表明singleton是单例(节约资源、提升性能):

(单例就是同一个对象,非单例就是不同的对象)

相当于就是到第一次调用的时候再创建这个bean!

注意:

在对象中循环输出1000次对象名后发现输出的是不同对象,这表明prototype是非单例的

判断这个bean是有状态还是无状态取决原因:是否保存数据,如果保存数据就是有状态的bean,反之亦然。

知识点总结:

多例有状态的bean也是线程安全的!!!

第三方bean:

总结:

3、springboot原理

(1)起步依赖

Maven的依赖传递

(2)自动配置

首先第一步是在pom文件引入gson的依赖,在之前的aliyun中已经引入:

在测试类的以下文件中进行更改:

添加以下代码:

复制代码
@Autowired
private Gson gson;

@Test
public void testGson(){
    System.out.println(gson.toJson(Result.success("hello gson!")));
}

之后运行测试类,结果如下:

基于以上内容,引入第三方依赖

首先在以下网页中下载并复制到项目中,引入pom文件

https://pan.baidu.com/s/1YppYAJbfbI9dfjSqQmIp4A?pwd=1234#list/path=%2Fsharelink3232509500-61245778219326%2F2025%E6%9C%80%E6%96%B0%E7%89%88JavaWeb%2BAI%2F%E8%B5%84%E6%96%99%2F14.%20%E5%90%8E%E7%AB%AFWeb%E8%BF%9B%E9%98%B6(SpringBoot%E5%8E%9F%E7%90%86%26Maven%E9%AB%98%E7%BA%A7)%2F%E8%B5%84%E6%96%99%2F02.%20%E8%87%AA%E5%8A%A8%E9%85%8D%E7%BD%AE%E5%8E%9F%E7%90%86&parentPath=%2Fsharelink3232509500-61245778219326

之后在以下文件中引入第三方依赖

复制代码
<!-- 第三方工具类依赖 -->
<dependency>
    <groupId>com.example</groupId>
    <artifactId>itheima-utils</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</dependency>

刷新!

目前自动配置实现方案有:基于component注解的自动配置(淘汰,使用繁琐)

相当于第三方的component定义之后,在项目的启动类添加componentscan进行扫描(包含所有需要扫描的包)否则默认扫描启动类当前包及其子包

第二种方案:使用注解import实现!

(1)导入普通类:在项目启动类中直接在上面添加注解import,并在括号内添加需要引入的第三方类名,相当于这个bean注入到ioc容器中

在测试类中测试,在ioc中提取,之后控制台显示这个方法已存在!

(2)导入配置类,同样在测试类中测试,同样显示!

(3)批量导入:

普通类和配置类同时导入,需要首先在第三方将需要导入的类写好,之后在项目启动类中直接应用,最后在测试类中使用

但以上方法存在一定的局限性!

(4)在第三方中有一个注解EnableHeaderConfig,如下所示:

之后在项目启动类上只添加这个注解即可,不需要使用import进行注入:

总结:

启动类本质上也是配置类:注解springbootapplication包含以下三个注解!

对于EnableAutoConfiguration注解来说:

对于conditional注解来说:

总结:

接下来是自动配置的实践部分,根据以下三个步骤进行设置:

右键项目名称------新建模块,配置如下:

之后点击创建!

之后将建好的pom文件的版本号进行修改为3.2.10:

之后新建aliyun_spring-boot-autofigure模块:

同样的做法创建之后将springboot版本号改为3.2.10

之后需要实现在starter模块中引入autoconfigure,这样以后其他项目引入依赖只需要引入starter即可!

首先需要在starter中引入autoconfigure模块,在starter的pom文件中添加以下内容:

之后在autoconfigure中完成自动配置功能:

首先将以下阿里云oss的依赖添加到autoconfigure的pom文件中:

复制代码
<!--阿里云OSS依赖-->
<dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
    <version>3.17.4</version>
</dependency>
<!--JAXB依赖,Java9以上版本需要-->
<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.1</version>
</dependency>
<dependency>
    <groupId>javax.activation</groupId>
    <artifactId>activation</artifactId>
    <version>1.1.1</version>
</dependency>
<!-- no more than 2.3.3-->
<dependency>
    <groupId>org.glassfish.jaxb</groupId>
    <artifactId>jaxb-runtime</artifactId>
    <version>2.3.3</version>
</dependency>

将之前项目中有关阿里云的两个工具类复制到autoconfigure中:

并在pom文件中插入以下依赖:

复制代码
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.30</version>
</dependency>

之后删除工具类中component注解,

删掉的原因:因为无法实现跨包传输,并与后面的解决方案冲突(componentscan无法扫描到,除非将所有项目放到aliyun.oss包下,但不现实)

之后点击alt+f12为aliyunOSSProperties添加一个构造函数!

之后同样删除properties中的component注解

之后在这个包下新建AliyunOssAutoconfigure:

并在新建的类前添加一个注解:Configuration

在工具类properties中有波浪线,原因如下,因此在新建的AliyunOssAutoconfigure类中添加以下注解

整体代码如下:

复制代码
package com.aliyun.oss;

import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

//AliyunOss自动配置类
@EnableConfigurationProperties(AliyunOSSProperties.class)
@Configuration
public class AliyunOssAutoConfigure {
    @Bean
    @ConditionalOnMissingBean
    public AliyunOSSOperator aliyunOSSOperator(AliyunOSSProperties aliyunOSSProperties) {
        return new AliyunOSSOperator(aliyunOSSProperties);
    }
}

之后在resources中新建目录:

(在创建autoconfigure时并没有resources资源文件夹,可以通过文件------项目结构------选择需要新建的项目点击------在需要新建的层级进行创建!!!)

之后再在这个目录下新建目录:spring

之后再在这个目录下新建文件(可以在外部库中查找包含spring-boot-autoconfiguration):

org.springframework.boot.autoconfigure.AutoConfiguration.imports

并在新添加的文件中添加:com.aliyun.oss.AliyunOssAutoConfigure(即autoconfiguration文件的地址!)

之后引入一个测试模块进行测试:

https://pan.baidu.com/s/1YppYAJbfbI9dfjSqQmIp4A?pwd=1234#list/path=%2Fsharelink3232509500-61245778219326%2F2025%E6%9C%80%E6%96%B0%E7%89%88JavaWeb%2BAI%2F%E8%B5%84%E6%96%99%2F14.%20%E5%90%8E%E7%AB%AFWeb%E8%BF%9B%E9%98%B6(SpringBoot%E5%8E%9F%E7%90%86%26Maven%E9%AB%98%E7%BA%A7)%2F%E8%B5%84%E6%96%99%2F03.%20%E8%87%AA%E5%AE%9A%E4%B9%89starter&parentPath=%2Fsharelink3232509500-61245778219326

在以上网页下载后,在项目中导入,并在pom文件中添加以下依赖:

复制代码
<dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-oss-spring-boot-starter</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</dependency>

之后在UploadController中打开:

添加以下代码,验证是否存入bean中:

复制代码
@Autowired
private AliyunOSSOperator aliyunOSSOperator;

加上之后并没有爆红,代表已成功存入bean

之后在下面的文件中添加阿里云配置:

复制代码
#阿里云配置
aliyun:
  oss:
    endpoint: https://oss-cn-beijing.aliyuncs.com
    bucketName: java-ai-learn-web-oss
    region : cn-beijing

之后启动测试类的启动项,并在apifox中发送请求:

结果显示成功响应!!!

相关推荐
咚为2 小时前
Rust tokio:Task ≠ Thread:Tokio 调度模型中的“假并发”与真实代价
开发语言·后端·rust
苍煜2 小时前
超简单 poi-tl 学习博客:从0到1掌握Word生成(无需模板+模板填充)
学习·word
浩浩的科研笔记2 小时前
入门读物---一篇24年的负荷预测综述---逐句翻译整理版
笔记·能源
sensen_kiss2 小时前
Jupter Notebook 使用教程
大数据·人工智能·python·学习·数据分析
狂奔蜗牛飙车2 小时前
Python学习之路-Python3 迭代器与生成器学习详解
开发语言·python·学习·#python学习笔记·python迭代器生成器
云小逸2 小时前
【Nmap 源码学习】深度解析:main.cc 入口函数详解
网络·windows·学习·nmap
醇氧2 小时前
【Linux】centos 防火墙学习
linux·学习·centos
爱吃羊的老虎2 小时前
【大模型开发】学习笔记一:RAG & LangChain 实战核心笔记
人工智能·笔记·语言模型·langchain
~光~~2 小时前
【嵌入式linux学习】06_中断子系统
linux·单片机·学习