-
提前创建好实例能够节约内存空间,使用起来也更加方便。
-
静态数据和配置信息适合使用提前创建实例模式
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;
}