首页 > 其他分享 >SpringBoot整合OSS中的设计模式----单例模式

SpringBoot整合OSS中的设计模式----单例模式

时间:2024-02-15 13:44:24浏览次数:29  
标签:SpringBoot OSS ossClient private accessKeySecret static 设计模式 String

在SpringBoot项目中使用OSS存储上传的图片,需要配置OSS设置信息。避免对象的重复创建,确保一个类只有一个实例,并提供一个全局访问点来访问该实例,于是用到了单例模式,这里复习一下单例模式。

单线程----懒汉式

@Data
@Component
@ConfigurationProperties(prefix = "aliyun.oss")
public class AliyunOssUtil {

    private static String endpoint;

    private static String accessKeyId;

    private static String accessKeySecret;

    private String bucketName;

    private static OSS ossClient = null;
    
    public static OSS getInstance(){
        if (null == ossClient){
            ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        }
        return ossClient;
    }
}

多线程----懒汉式

@Data
@Component
@ConfigurationProperties(prefix = "aliyun.oss")
public class AliyunOssUtil {

    private static String endpoint;

    private static String accessKeyId;

    private static String accessKeySecret;

    private String bucketName;

    private static OSS ossClient = null;

    public static synchronized OSS getInstance(){
        if (null == ossClient){
            ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        }
        return ossClient;
    }

双重检查锁----懒汉式

@Data
@Component
@ConfigurationProperties(prefix = "aliyun.oss")
public class AliyunOssUtil {

    private static String endpoint;

    private static String accessKeyId;

    private static String accessKeySecret;

    private String bucketName;

    private static OSS ossClient = null;

    public static OSS getInstance(){
        if (null == ossClient){
            synchronized (AliyunOssUtil.class){
                if (null == ossClient) {
                    ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
                }
            }
        }
        return ossClient;
    }
}

静态内部类----懒汉式(推荐)

@Data
@Component
@ConfigurationProperties(prefix = "aliyun.oss")
public class AliyunOssUtil {

    private static String endpoint;

    private static String accessKeyId;

    private static String accessKeySecret;

    private String bucketName;

    private static final class OssClientHolder {
        static final OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    }

    public static OSS getInstance(){
        return OssClientHolder.ossClient;
    }
}

饿汉式,在类初始化时已经自行实例化。

@Data
@Component
@ConfigurationProperties(prefix = "aliyun.oss")
public class AliyunOssUtil {

    private static String endpoint;

    private static String accessKeyId;

    private static String accessKeySecret;

    private String bucketName;

    private static final OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

    public static OSS getInstance(){
        return ossClient;
    }
}

标签:SpringBoot,OSS,ossClient,private,accessKeySecret,static,设计模式,String
From: https://www.cnblogs.com/poteitoutou/p/18016200

相关文章

  • 设计模式之单例模式
    经过多方博客,文章参考,枚举是实现单例模式的最好方式publicenumSingleton{INSTANCE;publicvoidbusinessMethod(){System.out.println("我是一个单例!");}}publicclassMainClass{publicstaticvoidmain(String[]args){Si......
  • 设计模式--策略模式(Strategy Pattern)
    策略模式(StrategyPattern)是一种行为设计模式,它定义了一系列的算法,并将每一个算法封装起来,使它们可以互相替换,让算法独立于使用它的客户端。策略模式主要包含以下几个角色:Strategy(策略):这是一个接口,通常用于定义所有支持的算法的公共接口。ConcreteStrategy(具体策略):这是实现了S......
  • Go 100 mistakes - #10: Not being aware of the possible problems with type embedd
     Becausethemutexisembedded,wecandirectlyaccesstheLockandUnlockmethods fromtheireceiver.Wementionedthatsuchanexampleisawrongusageoftypeembedding.What’s thereasonforthis?Sincesync.Mutexisanembeddedtype,theLockand......
  • 开源.NetCore通用工具库Xmtool使用连载 - OSS文件上传篇
    【Github源码】《上一篇》介绍了Xmtool工具库中的图像处理类库,今天我们继续为大家介绍其中的OSS文件上传类库。将本地文件上传到服务器是软件系统经常会遇到的需求,例如:设置用户头像,上传Excel报表等等;涉及到网络访问性能、存储空间等因素的考虑,通常我们会选择使用第三方的对象......
  • Java与SpringBoot网站的重构
    Java简介Java特点: Java的运行原理: SpringBoot网站的重构有源码的情况后台重构(mysql+maven+jdk+网站源码)将网站源码放入idea软件中查看重要配置文件:pom.xml和application.propertiespom.xml有网站的jdk版本和打包软件而application.properites文件中有着数据库的配......
  • springboot自定义starter 版本大于2.7
    相关jar包<!--提示配置--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><version>3.2.1</versi......
  • 设计模式--行为型模式
    设计模式--行为型模式目录设计模式--行为型模式模板方法模式定义结构举个栗子策略模式定义结构举个栗子命令模式定义结构举个栗子责任链模式定义结构举个例子状态模式定义结构举个栗子使用场景观察者模式定义结构举个栗子中介模式定义结构举个栗子迭代器模式定义结构举个栗子访问......
  • 设计模式--结构型模式
    设计模式--结构型模式目录设计模式--结构型模式代理模式静态代理jdk动态代理(接口实现原理)Cblib动态代理(继承原理)适配器模式类适配器模式对象适配器模式接口适配器模式装饰者模式使用场景:静态代理与装饰者模式的区别:桥接模式使用场景外观模式组合模式享元模式代理模式结构:......
  • 大年初二学习SpringBoot之权限管理
    1增加spring-security依赖目前市面上主流的权限框架是:spring-security和shiro,shrio使用起来更简单,而spring-security的功能更强大。苏三商城项目选择的权限框架是:spring-security。首先要加入spring-security的相关依赖包。在项目中的pom.xml文件中增加如下依赖:<dependency......
  • springboot整合redis报错:链接失败;org.springframework.data.redis.RedisConnectionFai
    错误原因:开启了保护模式解决方案:关闭保护模式和防火墙具体步骤:1、打开你的redis配置文件,做出如下修改2.开启进程守护yes代表开启守护进程模式。在该模式下,redis会在后台运行,并将进程pid号写入至redis.conf选项pidfile设置的文件中,此时redis将一直运行,除非手动kill该进程。3.......