[英]Spring JavaConfig how do I refer to beans that I have defined to create new beans
这是我的Applications bean定义的摘录,我希望能够引用我已定义的bean。
@Configuration
@ComponentScan({"com.abc.config", "com.abc.config.common"})
public class ApplicationConfig {
@Bean(name = "AWSCredentialsProvider")
AWSCredentials credentialsProvider() { return new AWSCredentials(/*Omitted*/); }
@Bean(name = "DynamoDBClient")
AmazonDynamoDBClient dynamoDBClient() {
AmazonDynamoDBClient dynamoDB = new AmazonDynamoDBClient(credentialsProvider());
return dynamoDB;
}
@Bean S3Repository s3Repository() {
AmazonS3 s3 = new AmazonS3Client(credentialsProvider());
return new S3Repository(s3);
}
@Bean LevelMapper levelMapper() { return new LevelMapper(s3Repository()); }
@Bean ImageDownloader imageDownloader() { return new ImageDownloader(s3Repository()); }
}
现在我正在做的是在两个地方调用s3Repository()
类的方法。 这样,我将创建存储库的两个实例,而我希望整个应用程序中只有一个实例。 诸如credentialsProvider()
类的东西很轻巧,因此我不介意为每个bean创建一个新实例。
实际上,它只会创建一个存储库实例。 在@Bean
注释的方法中使用s3Repository()
并不会真正调用该方法,而只是告诉Spring将已经创建的类型(如方法的返回类型所暗示)的bean注入到您创建的LevelMapper
和ImageDownloader
bean中。 因此,它将在引用该方法的两个bean中注入相同的存储库bean实例。
从这个春季文件 :
所有
@Configuration
类在启动时都使用CGLIB进行了子类化。 在子类中,子方法在调用父方法并创建新实例之前,首先检查容器中是否有任何缓存(作用域)的bean。 请注意,从Spring 3.2开始,不再需要将CGLIB添加到您的类路径中,因为CGLIB类已经在org.springframework
下重新打包并直接包含在spring-core JAR中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.