字段需要一个类型为 ... 的 bean,但找不到

Field required a bean of type ... that could not be found

在我的 Spring 项目中,我有一个接口:

public interface MyIntefrace {

    void myMethod(String myParam);
}

我有一个 class 来实现它:

@Component
@Profile("prod")
public class MyImplementationClass implements MyInterface {
    ...

在我的另一个 class 中,我按如下方式使用此对象:

@Autowired
MyInterface myinterface;

...

myinterface.myMethod(someParam);

它抛出一个错误:

Field myinterface in mypackage required a bean of type ... that could not be found.

The injection point has the following annotations:
    - @org.springframework.beans.factory.annotation.Autowired(required=true)

Consider defining a bean of type '...' in your configuration

我尝试在 MyInterface 上方添加 @Service 注释,但这没有帮助。我还能做什么?

确保 prod 配置文件已启用,例如通过 :

  1. JVM 属性 :

    -Dspring.profiles.active=prod

  2. 或环境变量:

    export spring_profiles_active=prod

  3. 或在创建时以编程方式创建 ApplicationContext:

    AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
    //...........
    ctx.getEnvironment().setActiveProfiles("prod");
    ctx.refresh();
    

@KenChan 提供的答案已经提到了一个可行的解决方案,但我想添加一些额外的细节。目前,您只有一个 MyIntefrace 的实现,它也用 @Profile 注释。如果您不 运行 您的应用程序使用此配置文件,则无法创建依赖于该 bean 的所有其他 bean(并且未使用 getter/setter 注入进行选择性注入)。

我建议您要么创建第二个实现,如果您的配置文件未激活,它将被注入,或者使用该配置文件注释所有依赖的 bean。

@Component
@Profile("prod")
public class MyImplementationClass implements MyInterface {
    // ...
}

@Component
@Profile("!prod") // second implementation, used if 'prod' is not active
public class MyImplementationClass implements MyInterface {
    // ...
}