SpringJavaConfig如何引用我定义的bean来创建新的bean
下面是我的应用程序bean定义的摘录,我希望能够引用我定义的beanSpringJavaConfig如何引用我定义的bean来创建新的bean,java,spring,spring-java-config,Java,Spring,Spring Java Config,下面是我的应用程序bean定义的摘录,我希望能够引用我定义的bean @Configuration @ComponentScan({"com.abc.config", "com.abc.config.common"}) public class ApplicationConfig { @Bean(name = "AWSCredentialsProvider") AWSCredentials credentialsProvider() { return new AWSCredent
@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进行子类化。
在子类中,子方法首先检查容器是否存在任何错误
在调用父方法并创建
新实例。请注意,从弹簧3.2开始,不再需要
将CGLIB添加到类路径,因为CGLIB类已重新打包
在org.springframework
下,直接包含在spring核心中
罐子
“你们能给我指个地方吗?这是有文档记录的地方吗?”nikhil添加了Spring文档参考。谢谢,我想我自己找不到那个篇文档。