首页 > 其他分享 >Spring--boot自动配置原理案例--阿里云--starter

Spring--boot自动配置原理案例--阿里云--starter

时间:2024-09-28 18:20:10浏览次数:8  
标签:String -- Spring aliOSSProperties boot springframework org import public

Spring–boot自动配置原理案例–阿里云–starter

定义这个starter的作用是它可以将阿里云的工具类自动放入IOC容器中,供人使用。
我们看一看构建starter的过程,其实就是在atuoconfigure模块中加入工具类,然后写一个配置类在其中将工具类放入IOC容器,之后在starter中引入atuoconfigure模块
在这里插入图片描述
我们在配置类中的代码,作用是将AliOSSUtils类放入IOC容器,使用时可以自动注入。

package com.aliyun.oss;

import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
//说明配置类
@Configuration
//直接将配置类AliOSSProperties注入IOC容器
@EnableConfigurationProperties(AliOSSProperties.class)

public class AliOSSAutoConfiguration {
 //将第三方类注入
    @Bean
    //把配置类当成参数注入
    public AliOSSUtils aliOSSUtils(AliOSSProperties aliOSSProperties){
        AliOSSUtils aliOSSUtils = new AliOSSUtils();
        //用set函数放好阿里云的配置参数类
        aliOSSUtils.setAliOSSProperties(aliOSSProperties);
        return aliOSSUtils;
    }

}

starter模块引入atuoconfigure模块,在pom文件中加入依赖

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

下面的代码是我们的oss工具类:

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
     * 我们的文件用的是MultipartFile类来传输文件
     */
    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();
        //使用UUID类生成随机的名字同时加上文件后缀名
        String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));

        //上传文件到 OSS
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        ossClient.putObject(bucketName, fileName, inputStream);

        //文件访问路径
        //先从  endpoint中分割出协议部分(如 "https:"),并取第一部分(即协议部分)
        //添加bucket名称
        //再取 endpoint的第二部分
        String url = endpoint.split("//")[0] + "//" + bucketName + "." + endpoint.split("//")[1] + "/" + fileName;
        // 关闭ossClient
        ossClient.shutdown();
        return url;// 把上传到oss的路径返回
    }
}

我们建立一个测试类,在其中调用OSS的工具类

package com.huihui.controller;

import com.aliyun.oss.AliOSSUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;

@RestController
public class ossController {
    @Autowired
    private AliOSSUtils ossUtils;
    @PostMapping("/uploadImage")
    public String uploadOss(MultipartFile image) throws IOException {
        //上传文件到阿里云 OSS

        String url=ossUtils.upload(image);
        return url;
    }
}

我们使用postman发送文件,
在这里插入图片描述
发送后我们就看到了输出了一个网址,我们再到阿里云中看一看
在这里插入图片描述

发现我们的文件已经传输到了阿里云上。

标签:String,--,Spring,aliOSSProperties,boot,springframework,org,import,public
From: https://blog.csdn.net/m0_74484354/article/details/142614678

相关文章

  • 深色系的可视化大屏随处可见,深色系B端系统不常见,有啥学问?
    一、可视化大屏为什么不宜选择浅色系。可视化大屏通常用于展示数据、图表、图像等信息,而不宜选择浅色系的原因有以下几点:1.对比度不足:浅色系的背景会使文字、图表等内容与背景色对比度降低,降低了信息的可读性和清晰度,尤其在较远距离观看时更为明显。2.易受光线影响:在......
  • 如何快速免费搭建自己的Docker私有镜像源来解决Docker无法拉取镜像的问题(搭建私有镜像
    文章目录......
  • CSS——边框线条动画效果
    CSS——边框线条动画效果上次我们实现了边框的线条缩放效果,今天我们来用三种方式完成边框的线条旋转动态效果。方法一:使用伪元素这是最普遍、最常用的方法,我们需要为边框所在的元素添加伪元素,然后旋转这个伪元素即可。本节将讲解以下视频的实现过程。伪元素边框旋转......
  • 关于算法复杂度
    1.复杂度的概念算法在编写成可执⾏程序后,运⾏时需要耗费时间资源和空间(内存)资源。因此衡量⼀个算法的好坏,⼀般是从时间和空间两个维度来衡量的,即时间复杂度和空间复杂度。    时间复杂度主要衡量⼀个算法的运⾏快慢,⽽空间复杂度主要衡量⼀个算法运⾏所......
  • ai换脸工具roop 食用教程
    1.准备工作开源项目地址https://github.com/s0md3v/roop说明文档https://docs.facefusion.io/usage/cli-argumentspython环境安装必须是python3.10版本2部署gitclone仓库gitclonehttps://github.com/s0md3v/roop.git2.1conda创建虚拟环境condacreate-nenv_n......
  • void * 类型指针变量如何赋值
      struct_MyDataType{/*Userdataheader*/UserDataTypeType;OpcUa_UInt16Number;//当前变量在该类型变量的序号/*Protocolinformation*/void*pValue;};typedefstruct_MyDataTypeMyDataType;pRes->Results[i].Value.Value.Doubl......
  • 结对项目
    这个作业属于哪个课程软件工程这个作业要求在哪里结对项目这个作业的目标实现一个自动生成小学四则运算题目的命令行程序项目成员车峤锐3122004471黄梓洋3122004481Github项目地址:项目链接2.PSP表格(计划时间)PSP表格(个人软件过程)PSP2.1Persona......
  • 2. 两数相加题解
    题目描述给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字0之外,这两个数都不会以0开头。示例1:输入:l1=[2,4,3],l2=[5,6,4......
  • 一些cookie的知识点
    cookie属性:1.domain:指定了cookie应该被发送到哪些域,默认情况下,cookie只会被发送到设置它的那个域。可以设置更广泛的域,比如 .example.com,这样所有子域都可以访问这个cookie。这里我们简单来了解一下域名和子域名。子域名定义:子域名是在域名前面添加......
  • C# ASP.NET Core Web API 框架 实现向手机发送验证码短信
    本文章主要是在C#ASP.NETCoreWebAPI框架实现向手机发送验证码短信功能。这里我选择是一个互亿无线短信验证码平台,其实像阿里云,腾讯云上面也可以。首先我们先去互亿无线https://www.ihuyi.com/api/sms.html去注册一个账号注册完成账号后,它会送10条免费短信以及通话验证......