重复AWS S3豆春,但重复的是无处可寻

问题描述 投票:0回答:1

我们刚刚创建一个自定义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豆定义。

那么,什么是这个服务类的内容?好了,没有什么特别的:

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类,豆重复错误消失。

我们不希望迫使项目通过添加AmazonS3Client注释使用我们@Primary实现。

那么,是什么我们也不会做错了什么?

java spring spring-boot amazon-s3
1个回答
0
投票

调试的几个小时后,我们实现了服务的构造函数的参数名字不正是命名为豆。我们重命名它,以便它匹配的Bean的名字:

@Service
public class MyService {
    private final AmazonS3Client s3Client; //Just fine

    @Autowired
    public MyService(AmazonS3Client amazonS3Client) { // Must match the bean name
        this.s3Client = amazonS3Client;
    }

    ...
}

就不见了Bean的重复错误。我们所要做的就是命名构造函数的参数,就像豆。

© www.soinside.com 2019 - 2024. All rights reserved.