字段需要一个类型为 ... 的 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
配置文件已启用,例如通过 :
JVM 属性 :
-Dspring.profiles.active=prod
或环境变量:
export spring_profiles_active=prod
或在创建时以编程方式创建 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 {
// ...
}
在我的 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
配置文件已启用,例如通过 :
JVM 属性 :
-Dspring.profiles.active=prod
或环境变量:
export spring_profiles_active=prod
或在创建时以编程方式创建
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 {
// ...
}