gpt4 book ai didi

java - Spring是否通过Java Config的方法名称 Autowiring

转载 作者:搜寻专家 更新时间:2023-11-01 02:05:38 26 4
gpt4 key购买 nike

我们在 ApplicationConfig 中定义了一些 bean,就像这样 -

@Bean
S3Repository s3Repository() {
AmazonS3 s3 = new AmazonS3Client(s3AdminReadWriteCreds());
return new S3Repository(s3);
}

@Bean
S3Repository s3PrivateContentRepository() {
AmazonS3 s3 = new AmazonS3Client(readOnlyS3Creds());
return new S3Repository(s3);
}

@Bean
S3Repository s3SyncFilesContentRepository() {
AmazonS3 s3 = new AmazonS3Client(readOnlySpecificBucketCreds());
return new S3Repository(s3);
}

这就是它们在代码中的使用方式 -

public class AssetReader {
@Autowired
private S3Repository s3PrivateContentRepository;
.... used inside the class ....
}

类似地,其他 bean 的命名与预期生成它们的方法相同。

该应用程序运行良好,但我对此感到有点惊讶,我不确定是否偶然将具有 Admin 凭据的 bean 自动连接到各处,或者是否由于一些实现细节而连接了正确的 bean Spring ?

我认为如果 Autowiring 会产生歧义,则必须指定限定符。假设这按预期工作,我们是否有任何理由对这些 bean 进行限定?

最佳答案

原因是在缺少显式Qualifier 注释的情况下,Spring 应用了一个fallback method。 :

For a fallback match, the bean name is considered a default qualifier value. Thus you can define the bean with an id "main" instead of the nested qualifier element, leading to the same matching result.

不过,依赖变量名显然是一种冒险的方法,您应该尽可能避免。如果名称不同步,原本无害的重构可能会变成全面崩溃。

关于java - Spring是否通过Java Config的方法名称 Autowiring ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34728974/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com