springboot如何bean注入实例。如何使用多实例

    xiaoxiao2023-10-22  156

    提前创建好实例能够节约内存空间,使用起来也更加方便。

    静态数据和配置信息适合使用提前创建实例模式

    springboot 如何创建实例?

    springboot 使用@Bean 创建实例

    @Bean是一个方法级别的注解,主要在@Configuration注解的类里,也可以用在@Component注解的类里

    示例:

    创建一个Java实体类 package com.admin.util.fileUpload; import lombok.Data; /** * 开发公司:个人 * 版权:刘志强 * <p> * OSSModle * * @author 刘志强 * @created Create Time: 2019/2/18 */ @Data public class OSSModle { /** * 端点服务地址 */ private String endpoint; /** * accessKeyId */ private String accessKeyId; /** * accessKeySecret */ private String accessKeySecret; /** * 包名 */ private String bucketName; /** * 文件名策略 日期格式, */ private String fileName; /** * 文件夹策略 日期格式, */ private String dirName; }

    使用@Bean创建实例

    @Configuration public class FileProcessingConfig { @Bean(name = "ossModle") @ConfigurationProperties(prefix = "file.ossModel") @Primary public OSSModle ossModle() { OSSModle ossModle = new OSSModle(); return ossModle; } @Bean(name = "ossModleTwo") public OSSModle ossModleTwo() { OSSModle ossModle = new OSSModle(); ossModle.setAccessKeyId(); ossModle.setAccessKeySecret(); ossModle.setBucketName(); ossModle.setDirName(); ossModle.setEndpoint(); ossModle.setFileName(); return ossModle; } }

    @Primary 默认加载实例,当多实例时,自动装配不知道装配哪个实例时,会选用@Primary的实例

    @ConfigurationProperties 可以将application.yml里对应的信息封装成实体类

    此示例中application.yml文件对应的是

    file: ossModel: endpoint: https://oss-cn-beijing.aliyuncs.com accessKeyId: LTAIMERFHF6oGT4m accessKeySecret: tr4hpwmK0byGBJ8ERF8wm5O6QTWu3 bucketName: yun-cunchu dirName: yyyy-MM-dd fileName: yyyy-MM-dd-HH-mm-ss

    如何使用

    使用 @Autowired 来装配实例

    使用 @Qualifier 来指定装配哪个实例,当不指定时装配@Primary声明的实例

    @Autowired public OSSModle ossModle @Autowired @Qualifier("ossModleTwo") public OSSModle ossModleTwo @GetMapping("/getOSSModle") public Map<String,OSSModle> getOSSModle() { Map<String,OSSModle> map = new HashMap<>(); map.put("ossModle",ossModle) // 此实例是@Bean(name = "ossModle") 的实例 map.put("ossModleTwo",ossModleTwo) // 此实例是@Bean(name = "ossModleTwo") 的实例 return map; }
    最新回复(0)