Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SpringJavaConfig如何引用我定义的bean来创建新的bean_Java_Spring_Spring Java Config - Fatal编程技术网

SpringJavaConfig如何引用我定义的bean来创建新的bean

SpringJavaConfig如何引用我定义的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

下面是我的应用程序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进行子类化。 在子类中,子方法首先检查容器是否存在任何错误 在调用父方法并创建 新实例。请注意,从弹簧3.2开始,不再需要 将CGLIB添加到类路径,因为CGLIB类已重新打包 在
org.springframework
下,直接包含在spring核心中 罐子


“你们能给我指个地方吗?这是有文档记录的地方吗?”nikhil添加了Spring文档参考。谢谢,我想我自己找不到那个篇文档。