我们刚刚在一个AmazonS3Client已经使用 Amazon S3 功能的项目上创建了一个带有凭证的自定义项:
import com.amazonaws.auth.AWSCredentialsProvider;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
@Configuration
public class S3Config {
@Bean
public static AmazonS3Client amazonS3Client(final AWSCredentialsProvider awsCredentialsProvider) {
return (AmazonS3Client) AmazonS3ClientBuilder.standard()
.withCredentials(awsCredentialsProvider)
.build();
}
}
它在所有其他项目上都运行良好,但由于某种原因,在启动应用程序时,我们收到此错误:
Parameter 0 of constructor in foo.bar.MyService required a single bean, but 2 were found:
- amazonS3Client: defined by method 'amazonS3Client' in class path resource [foo/bar/S3Config.class]
- amazonS3: defined in null
在我们amazonS3定义了 Bean 的项目中,无处,绝对无处。
那么,这个Service类的内容是什么呢?好吧,没什么特别的:
import com.amazonaws.services.s3.AmazonS3Client;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.ByteArrayInputStream;
import java.net.URL;
@Service
public class MyService {
private final AmazonS3Client s3Client;
@Autowired
public MyService(AmazonS3Client s3Client) {
this.s3Client = s3Client;
}
...
}
它应该使用AmazonS3Client我们刚刚创建的,并且根据错误消息的第一个匹配它匹配它就好了。如果我删除我的S3Config类,bean 复制错误就消失了。
我们不想AmazonS3Client通过添加@Primary注解来强制项目使用我们的实现。
那么,我们可能做错了什么?
紫衣仙女
相关分类