当前位置: 首页 > news >正文

[JavaWeb]【十三】web后端开发-原理篇

目录

一、SpringBoot配置优先级

1.1 配置优先级比较

1.2 java系统属性和命令行参数

 1.3 打包运行jar

 1.4 综合优先级​编辑

二、Bean管理

2.1 获取bean

2.2 bean作用域

2.2.1 五种作用域

2.2.2  配置作用域

2.3 第三方bean

 2.3.1 编写公共配置类

三、SpringBoot原理

3.1 起步依赖=原理

3.2 自动配置 =原理

3.2.1 方案一:(放弃)

3.2.2 方案二

 3.2.3 自动配置-源码跟踪

 3.2.4 @Conditional注解​编辑

3.2.5 案例(自定义starter)

 3.2.5.1 目标​​​​​​​以及分析​编辑

3.2.5.2 新建aliyun-oss-spring-boot-starter模块

 3.5.2.3 新建模块 aliyun-oss-spring-boot-autoconfigure

3.5.2.4 aliyun-oss-spring-boot-starter 引入

3.5.2.5 aliyun-oss-spring-boot-autoconfigure引入依赖

 3.5.2.6 AliOSSAutoConfigure

3.5.2.7 AliOSSUtils

3.5.2.8 AliOSSProperties

3.5.2.9 新建org.springframework.boot.autoconfigure.AutoConfiguration.imports


前言:SpringBoot配置优先级、Bean管理、SpringBoot原理

一、SpringBoot配置优先级

1.1 配置优先级比较

 

1.2 java系统属性和命令行参数

 

 1.3 打包运行jar

 1.4 综合优先级

  

二、Bean管理

2.1 获取bean

 

2.2 bean作用域

2.2.1 五种作用域

2.2.2  配置作用域

 

2.3 第三方bean

 

 2.3.1 编写公共配置类

  <!-- https://mvnrepository.com/artifact/org.dom4j/dom4j --><dependency><groupId>org.dom4j</groupId><artifactId>dom4j</artifactId><version>2.1.3</version></dependency>

 

package com.runa.config;import org.dom4j.io.SAXReader;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration  //配置类
public class CommonConfig {//声明第三方Bean@Bean // 将当前方法的返回值对象交给IOC容器管理,成为IOC容器的bean//通过@bean注解的name/value的属性指定bean名称,如果未指定就是默认方法名public SAXReader saxReader(){return new SAXReader();}
}

 

三、SpringBoot原理

 

3.1 起步依赖=原理

3.2 自动配置 =原理

 ​​​​​​​

3.2.1 方案一:(放弃)

3.2.2 方案二

 ​​​​​​​

 

 3.2.3 自动配置-源码跟踪

 ​​​​​​​​​​​​​​

 

 

 ​​​​​​​3.2.4 @Conditional注解

 三个常见

3.2.5 案例(自定义starter)

 ​​​​​​​​​​​​​​

 

 3.2.5.1 目标​​​​​​​以及分析

3.2.5.2 新建aliyun-oss-spring-boot-starter模块

 

 

 删除pom多余内容

 

 

 

 

 删除多余文件

 

 3.5.2.3 新建模块 aliyun-oss-spring-boot-autoconfigure

 

 删除多余pom内容和文件

 

 

 

 

3.5.2.4 aliyun-oss-spring-boot-starter 引入

		<dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-oss-spring-boot-autoconfigure</artifactId><version>0.0.1-SNAPSHOT</version></dependency>

3.5.2.5 aliyun-oss-spring-boot-autoconfigure引入依赖

   <!--        阿里云OSS依赖--><dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.15.1</version></dependency><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>
   <!--        web  起步依赖  --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>

 3.5.2.6 AliOSSAutoConfigure

package com.aliyun.oss;import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
@EnableConfigurationProperties(AliOSSProperties.class)
public class AliOSSAutoConfigure {@Beanpublic AliOSSUtils aliOSSUtils(AliOSSProperties aliOSSProperties){AliOSSUtils aliOSSUtils = new AliOSSUtils();aliOSSUtils.setAliOSSProperties(aliOSSProperties);return aliOSSUtils;}
}

3.5.2.7 AliOSSUtils

package com.aliyun.oss;import org.springframework.web.multipart.MultipartFile;import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;/*** 阿里云 OSS 工具类*/public class AliOSSUtils {private AliOSSProperties aliOSSProperties;public AliOSSProperties getAliOSSProperties() {return aliOSSProperties;}public void setAliOSSProperties(AliOSSProperties aliOSSProperties) {this.aliOSSProperties = aliOSSProperties;}/*** 实现上传图片到OSS*/public String upload(MultipartFile file) throws IOException {// 获取阿里云OSS参数String endpoint = aliOSSProperties.getEndpoint();String accessKeyId = aliOSSProperties.getAccessKeyId();String accessKeySecret = aliOSSProperties.getAccessKeySecret();String bucketName = aliOSSProperties.getBucketName();// 获取上传的文件的输入流InputStream inputStream = file.getInputStream();// 避免文件覆盖String originalFilename = file.getOriginalFilename();String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));//上传文件到 OSSOSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);ossClient.putObject(bucketName, fileName, inputStream);//文件访问路径String url = endpoint.split("//")[0] + "//" + bucketName + "." + endpoint.split("//")[1] + "/" + fileName;// 关闭ossClientossClient.shutdown();return url;// 把上传到oss的路径返回}}

3.5.2.8 AliOSSProperties

package com.aliyun.oss;import org.springframework.boot.context.properties.ConfigurationProperties;@ConfigurationProperties(prefix = "aliyun.oss")
public class AliOSSProperties {private String endpoint;private String accessKeyId;private String accessKeySecret;private String bucketName;public String getEndpoint() {return endpoint;}public void setEndpoint(String endpoint) {this.endpoint = endpoint;}public String getAccessKeyId() {return accessKeyId;}public void setAccessKeyId(String accessKeyId) {this.accessKeyId = accessKeyId;}public String getAccessKeySecret() {return accessKeySecret;}public void setAccessKeySecret(String accessKeySecret) {this.accessKeySecret = accessKeySecret;}public String getBucketName() {return bucketName;}public void setBucketName(String bucketName) {this.bucketName = bucketName;}
}

3.5.2.9 新建org.springframework.boot.autoconfigure.AutoConfiguration.imports

 

新建文件 文件名:

org.springframework.boot.autoconfigure.AutoConfiguration.imports

 输入内容

com.aliyun.oss.AliOSSAutoConfigure

相关文章:

[JavaWeb]【十三】web后端开发-原理篇

目录 一、SpringBoot配置优先级 1.1 配置优先级比较 1.2 java系统属性和命令行参数 1.3 打包运行jar 1.4 综合优先级​编辑 二、Bean管理 2.1 获取bean 2.2 bean作用域 2.2.1 五种作用域 2.2.2 配置作用域 2.3 第三方bean 2.3.1 编写公共配置类 三、SpringBoot原理 …...

服务注册中心 Eureka

服务注册中心 Eureka Spring Cloud Eureka 是 Netflix 公司开发的注册发现组件&#xff0c;本身是一个基于 REST 的服务。提供注册与发现&#xff0c;同时还提供了负载均衡、故障转移等能力。 Eureka 有 3 个角色 服务中心&#xff08;Eureka Server&#xff09;&#xff1a;…...

SpringIoC组件的高级特性

目录 一、Bean组件的周期与作用域 二、FactoryBean接口 一、Bean组件的周期与作用域 1.1 Bean组件的生命周期 什么是Bean的周期方法 我们可以在组件类中定义方法&#xff0c;然后当IoC容器实例化和销毁组件对象的时候进行调用&#xff01;这两个方法我们成为生命周期方法&a…...

Linux--进程地址空间

1.线程地址空间 所谓进程地址空间&#xff08;process address space&#xff09;&#xff0c;就是从进程的视角看到的地址空间&#xff0c;是进程运行时所用到的虚拟地址的集合。 简单地说&#xff0c;进程就是内核数据结构和代码和本身的代码和数据&#xff0c;进程本身不能…...

ISIS路由协议

骨干区域与非骨干区域 凡是由级别2组建起来的邻居形成骨干区域&#xff1b;级别1就在非骨干区域&#xff0c;骨干区域有且只有一个&#xff0c;并且需要连续&#xff0c;ISIS在IP环境下目前不支持虚链路。 路由器级别 L1路由器只能建立L1的邻居&#xff1b;L2路由器只能建立L…...

论文解读:Bert原理深入浅出

摘取于https://www.jianshu.com/p/810ca25c4502 任务1&#xff1a;Masked Language Model Maked LM 是为了解决单向信息问题&#xff0c;现有的语言模型的问题在于&#xff0c;没有同时利用双向信息&#xff0c;如 ELMO 号称是双向LM&#xff0c;但实际上是两个单向 RNN 构成的…...

共享内存 windows和linux

服务端&#xff0c;即写入端 #include <iostream> #include <string.h> #define BUF_SIZE 1024 #ifdef _WIN32 #include <windows.h> #define SHARENAME L"shareMemory" HANDLE g_MapFIle; LPVOID g_baseBuffer; #else #define SHARENAME "sh…...

一个mongodb问题分析

mongodb问题分析 现状 表的个数&#xff1a; 生产上常用的表就10来个。 sharding cluster replica set方式部署&#xff1a; 9个shard server&#xff0c; 每个shard server 1主2从&#xff0c; 大量数据写入时或对大表创建索引时&#xff0c;可能有主从复制延迟问题。实…...

Vue3.0极速入门- 目录和文件说明

目录结构 以下文件均为npm create helloworld自动生成的文件目录结构 目录截图 目录说明 目录/文件说明node_modulesnpm 加载的项目依赖模块src这里是我们要开发的目录&#xff0c;基本上要做的事情都在这个目录里assets放置一些图片&#xff0c;如logo等。componentsvue组件…...

RabbitMQ---订阅模型-Direct

1、 订阅模型-Direct • 有选择性的接收消息 • 在订阅模式中&#xff0c;生产者发布消息&#xff0c;所有消费者都可以获取所有消息。 • 在路由模式中&#xff0c;我们将添加一个功能 - 我们将只能订阅一部分消息。 例如&#xff0c;我们只能将重要的错误消息引导到日志文件…...

Django REST framework实现api接口

drf 是Django REST framework的简称&#xff0c;drf 是基于django的一个api 接口实现框架&#xff0c;REST是接口设计的一种风格。 一、 安装drf pip install djangorestframework pip install markdown # Markdown support for the browsable API. pip install …...

4.19 20

服务端没有 listen&#xff0c;客户端发起连接建立&#xff0c;会发生什么&#xff1f; 服务端如果只 bind 了 IP 地址和端口&#xff0c;而没有调用 listen 的话&#xff0c;然后客户端对服务端发起了连接建立&#xff0c;服务端会回 RST 报文。 没有 listen&#x…...

(动态规划) 剑指 Offer 10- II. 青蛙跳台阶问题 ——【Leetcode每日一题】

❓剑指 Offer 10- II. 青蛙跳台阶问题 难度&#xff1a;简单 一只青蛙一次可以跳上1级台阶&#xff0c;也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。 答案需要取模 1e97&#xff08;1000000007&#xff09;&#xff0c;如计算初始结果为&#xff1a;1…...

物联网WIFI 模块AT指令版本七大元凶

前言 目前我们讨论的这个问题&#xff0c;并不是说WIFI方案不具备以应的功能。而是指在同一个AT固件下可能存在的问题。由于各厂商AT指令的开发深度不同&#xff0c;导致各厂商之间的AT指令差异很大。我总结了一些问题&#xff0c;可能是导致目前AT指令不好用元凶。 底层库问题…...

Qt 正则(数据格式校验、替换指定格式数据、获取匹配数据)

头文件引用 #include <QRegExp>初始化QRegExp实列 QRegExp re("^\\d{1,3},\\d{1,3}$");数据格式验证 QRegExp re("^\\d{1,3},\\d{1,3}$"); QString msg "12,33"; if(re.exactMatch()){// 验证通过 }else{//验证不通过 }替换数…...

网络层协议——ip

文章目录 1. 网络层2. IP协议2.1 协议头格式 3. 网段划分3.1 特殊的IP地址3.2 IP地址的数量限制 4. 私有IP地址和公网IP地址 1. 网络层 在应用层解决了如何读取完整报文、序列化反序列化、协议处理问题。在传输层解决了可靠性问题。那么网络层IP的作用是在复杂的网络环境中确定…...

Qt6和Rust结合构建桌面应用

桌面应用程序是原生的、快速的、安全的&#xff0c;并提供Web应用程序无法比拟的体验。 Rust 是一种低级静态类型多范式编程语言&#xff0c;专注于安全性和性能&#xff0c;解决了 C/C 长期以来一直在努力解决的问题&#xff0c;例如内存错误和构建并发程序。 在桌面应用程序开…...

Kubernetes(K8S)简介

Kubernetes (K8S) 是什么 它是一个为 容器化 应用提供集群部署和管理的开源工具&#xff0c;由 Google 开发。Kubernetes 这个名字源于希腊语&#xff0c;意为“舵手”或“飞行员”。k8s 这个缩写是因为 k 和 s 之间有八个字符的关系。 Google 在 2014 年开源了 Kubernetes 项…...

面试中问:React中函数组件和class组件的区别,hooks模拟生命周期

React中函数组件和class组件的区别&#xff0c;hooks模拟生命周期 React中函数组件和class组件的区别hooks模拟生命周期 React中函数组件和class组件的区别 函数组件: 定义&#xff1a;函数组件是使用纯函数定义的组件&#xff0c;它接受 props 作为参数并返回 JSX。简洁性&am…...

Python高光谱遥感数据处理与高光谱遥感机器学习方法应用

本文提供一套基于Python编程工具的高光谱数据处理方法和应用案例。 本文涵盖高光谱遥感的基础、方法和实践。基础篇以学员为中心&#xff0c;用通俗易懂的语言解释高光谱的基本概念和理论&#xff0c;旨在帮助学员深入理解科学原理。方法篇结合Python编程工具&#xff0c;专注…...

Java实现接收xml格式数据并解析,返回xml格式数据

需求描述&#xff1a;后端接受xml格式数据&#xff0c;解析出相应数据&#xff0c;并返回xml格式数据。 <!--XML解析--><dependency><groupId>com.fasterxml.jackson.dataformat</groupId><artifactId>jackson-dataformat-xml</artifactId>…...

【C++】初步认识模板

&#x1f3d6;️作者&#xff1a;malloc不出对象 ⛺专栏&#xff1a;C的学习之路 &#x1f466;个人简介&#xff1a;一名双非本科院校大二在读的科班编程菜鸟&#xff0c;努力编程只为赶上各位大佬的步伐&#x1f648;&#x1f648; 目录 前言一、泛型编程二、函数模板2.1 函…...

Ansible 临时命令搭建安装仓库

创建一个名为/ansible/yum.sh 的 shell 脚本&#xff0c;该脚本将使用 Ansible 临时命令在各个受管节点上安装 yum 存储库. 存储库1&#xff1a; 存储库的名称为 EX294_BASE 描述为 EX294 base software 基础 URL 为 http://content/rhel8.0/x86_64/dvd/BaseOS GPG 签名检查为…...

phpstorm动态调试

首先在phpstudy搭建好网站&#xff0c;在管理拓展开启xdebug拓展 查看php.ini配置已经更改 需要增添修改一下设置 [Xdebug] zend_extensionD:/phpstudy_pro/Extensions/php/php5.6.9nts/ext/php_xdebug.dll xdebug.collect_params1 xdebug.collect_return1 xdebug.auto_trace…...

二叉树的层序遍历及完全二叉树的判断

文章目录 1.二叉树层序遍历 2.完全二叉树的判断 文章内容 1.二叉树层序遍历 二叉树的层序遍历需要一个队列来帮助实现。 我们在队列中存储的是节点的地址&#xff0c;所以我们要对队列结构体的数据域重定义&#xff0c; 以上代码 从逻辑上来讲就是1入队&#xff0c;1出队&am…...

java八股文面试[JVM]——JVM内存结构

参考&#xff1a; JVM学习笔记&#xff08;一&#xff09;_卷心菜不卷Iris的博客-CSDN博客 JVM是运行在操作系统之上的&#xff0c;它与硬件没有直接的交互 JVM内存结构&#xff1a; 方法区&#xff1a;存储已被虚拟机加载的类元数据信息(元空间) 堆&#xff1a;存放对象实…...

Kafka基本使用

查看Kafka的进程是否在运行 #命令行终端中运行如下命令 ps -ef | grep kafkafind / -iname kafka-server-start.shcd /usr/local/kafka/bin/#启动kafka ./kafka-server-start.sh -daemon /usr/local/kafka/config/server.propertiesKafka默认使用9092端口提供服务&#xf…...

【目标检测】理论篇(2)YOLOv3网络构架及其代码实现

网络构架图&#xff1a; 代码实现&#xff1a; import math from collections import OrderedDictimport torch.nn as nn#---------------------------------------------------------------------# # 残差结构 # 利用一个1x1卷积下降通道数&#xff0c;然后利用一个3x3卷…...

k8s之工作负载、Deployment、DaemonSet、StatefulSet、Job、CronJob及GC

文章目录 1、工作负载1.1、定义1.2、分类 2、Deployment2.1、定义2.2、Deployment创建2.3、Deployment 更新机制2.3.1、比例缩放&#xff08;Proportional Scaling&#xff09;2.3.2、HPA&#xff08;动态扩缩容&#xff09;2.3.2.1、需要先安装metrics-server2.3.2.2、配置hpa…...

IDEA项目实践——Element UI概述

系列文章目录 IDEA项目实践——JavaWeb简介以及Servlet编程实战 IDEA项目实践——Spring当中的切面AOP IDEA项目实践——Spring框架简介&#xff0c;以及IOC注解 IDEA项目实践——动态SQL、关系映射、注解开发 IDEWA项目实践——mybatis的一些基本原理以及案例 文章目录 …...

广汉做网站/seo搜狗排名点击

assertNotContains()函数是PHPUnit中的内置函数&#xff0c;用于断言没有值的数组。如果数组不包含所提供的值&#xff0c;则该断言将返回true&#xff1b;否则返回false&#xff1b;如果为true&#xff0c;则断言了已通过测试的用例&#xff0c;否则测试用例失败了。用法&…...

抖音小程序开发公司/深圳seo优化外包公司

Spring2.5 的事物配置&#xff1a;<!-- 配置事务通知 --><tx:advice id"txAdvice" transactionManagertxManager><!-- REQUIRED:表示当前方法必须运行在一个事物中&#xff0c;没有事物则创建一个。SUPPORTS&#xff1a;表示当前方法不需要事物-->…...

页面模板 公众号/seo关键词优化排名哪家好

7、约束&#xff08;非常重要&#xff0c;五颗星*****&#xff09; 7.1、什么是约束&#xff1f; 约束对应的英语单词&#xff1a;constraint 在创建表的时候&#xff0c;我们可以给表中的字段加上一些约束&#xff0c;来保证这个表中数据的 完整性、有效性&#…...

怎样做企业手机网站建设/有必要买优化大师会员吗

1 运行netstat -ano发现80端口被pid4的进程占用 2 打开任务管理器&#xff0c;发现pid4的进程&#xff0c;其实是system进程&#xff0c;其对应的进程描述是NT kernel & system。 3 如何清除呢&#xff1f;需要使用注册表&#xff0c;开始-》regedit&#xff0c;打开 4 找到…...

枣庄哪里有做网站设计/网络推广精准营销推广

在 Java 中调用 Go 的大致过程如下go --> cgo --> jna --> java整个过程要解决的问题主要两个&#xff1a;数据类型在两种语言中如何转化何时清理无用的数据下面就围绕上述调用过程来阐述&#xff0c;本文涉及代码完整版可以下面链接找到&#xff1a;Go -> Cgo这是…...

沈阳高端网站/郑州专业的网站公司

概念 自动化构建工具&#xff0c;暂且类比成maven那一类的工具吧(不完全是) 可以不许需要手动再做重复的事情(task) 安装gulp需要Node.js&#xff0c;所以我觉得可以直接学Node.js&#xff0c;对后续的学习还是有比较大的便利。 第三方依赖管理工具bower less可以按照编程的写法…...