我在spring boot应用程序中使用@Autowired
来初始化一些属性。
我知道如何初始化原始数据类型,但我不知道如何初始化对象。
那是我的Component
:
@Component
@ConfigurationProperties(prefix = "bitmovin.bitmovin")
public class BitmovinConfig {
private S3InputConfig S3InputConfig = new S3InputConfig();
private int threadPoolSize;
private ArrayList<String> testFiles;
public BitmovinConfig() {
}
public S3InputConfig getS3InputConfig() {
return S3InputConfig;
}
public void setS3InputConfig(S3InputConfig s3InputConfig) {
S3InputConfig = s3InputConfig;
}
public int getThreadPoolSize() {
return threadPoolSize;
}
public void setThreadPoolSize(int threadPoolSize) {
this.threadPoolSize = threadPoolSize;
}
public ArrayList<String> getTestFiles() {
return testFiles;
}
public void setTestFiles(ArrayList<String> testFiles) {
this.testFiles = testFiles;
}
}
那是我的application.properties
文件:
bitmovin.bitmovin.threadPoolSize = 30
bitmovin.bitmovin.S3InputConfig = ??
bitmovin.bitmovin.testFiles= ??
如何初始化application.properties
中的对象或列表?
更新
对象,我没有创建自己,我想初始化:
public class S3OutputConfig {
@Expose
public String name;
@Expose
public S3Region region;
@Expose
public String accessKey;
@Expose
public String secretKey;
@Expose
public String bucket;
@Expose
public String prefix;
@Expose
public boolean makePublic;
}
答案 0 :(得分:2)
对于列表,您有两种方法:
bitmovin.bitmovin.testFiles=foo,bar,biz
将在testFiles
中设置3个项目。您还可以通过索引控制事物。上面的代码可以改写为
bitmovin.bitmovin.testFiles[0]=foo
bitmovin.bitmovin.testFiles[1]=bar
bitmovin.bitmovin.testFiles[2]=biz
对于该对象,如果您不在代码中自己创建它,则需要确保它具有公共默认构造函数。然后使用.
导航,像任何其他对象一样导航对象。假设您的S3InputConfig
具有name
属性(getName
和setName
):
bitmovin.bitmovin.s3InputConfig.name=the name
您在Boot的文档中已经看到过多使用小写连字符。我们支持原始格式以及连字符小写和其他格式(请参阅relaxed binding)。配置的规范表示如下:
bitmovin.bitmovin.test-files[0]=foo
bitmovin.bitmovin.test-files[1]=bar
bitmovin.bitmovin.test-files[2]=biz
bitmovin.bitmovin.s3-input-config.name=the name
答案 1 :(得分:0)
通常在使用库中的类时,你无法控制你可以通过这样的方式创建一个bean:
@Bean
S3OutputConfig s3OutputConfig(BitmovinConfig bitmovinConfig) {
S3OutputConfig s3OutputConfig = new S3OutputConfig();
// Do whatever else you want to setup the bean
return s3OutputConfig;
}
这允许灵活地包含初始化bean所需的其他bean /配置(它们是自动装配的)。
答案 2 :(得分:0)
另一个选择是在构建@Bean
时使用@CondtionalOnProperty
。这样,您可以限制将哪些bean添加到上下文中。
答案 3 :(得分:-1)
非常简单地为属性bean创建和初始化嵌入对象。
E.g。如果你有这样的课程:
@Component
@ConfigurationProperties(prefix = "bitmovin.bitmovin")
public class BitmovinConfig {
private S3OutputConfig outputConfig = new S3OutputConfig();
public S3OutputConfig getOutputConfig() {
return outputConfig;
}
}
其中S3OutputConfig结构:
public class S3OutputConfig {
public String name;
public S3Region region;
public String accessKey;
public String secretKey;
public String bucket;
public String prefix;
public boolean makePublic;
}
您可以通过以下方式初始化outputConfig的字段:
bitmovin.bitmovin.output-config.name=Config Name
bitmovin.bitmovin.output-config.access-key=XAKJGSDIUGASASD
bitmovin.bitmovin.output-config.region=us-east-1