【发布时间】:2016-07-20 17:59:09
【问题描述】:
这个问题被问了很多次。我有点困惑,希望你的想法。
我正在将 Google Cloud Storage 集成到 Spring-Boot 中。
我有配置类。
@Component
@ConfigurationProperties(prefix = "gcs.credentials")
public class GCSConfig {
private String serviceAccountId;
//...
}
实现单例模式的存储工厂。
@Component
public class StorageFactory {
@Autowired
private static GCSConfig gcsConfig;
private static Storage instance = null;
public static synchronized Storage getService() throws GeneralSecurityException, IOException {
if (instance == null) {
instance = buildService();
}
return instance;
}
private static Storage buildService() throws GeneralSecurityException, IOException {
HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
JsonFactory jsonFactory = new JacksonFactory();
// ...
// I use gcsConfig here
// ...
return new Storage.Builder(httpTransport, jsonFactory, credential)
.setApplicationName("Google Cloud Storage App")
.build();
}
}
我像这样在service 中使用 StorageFactory。
Storage client = StorageFactory.getService()
我读到Autowired 不会注入静态成员。还有另一种实现方式吗?也许这里 Spring-Boot 的功能可以轻松创建单例。
我应该读什么?你能给我链接吗?你能指引我正确的方向吗?
GCS examples 的链接。
【问题讨论】:
-
你知道spring beans的默认作用域是“singleton”吗?因此,在一个专门用作 Spring bean 的类中实现单例模式并没有多大意义。
标签: java spring spring-boot google-cloud-storage