我正在使用基于构造函数的依赖注入将 a 注入javax.inject.Provider<T>
到服务中。使用 Spring Framework (4.2.5),NoSuchBeanDefinitionException
将抛出“没有找到类型为 [T] 的合格 bean 的依赖项。为什么T
Spring 在注入时会期望javax.inject.Provider<T>
?
这是示例代码:
提供者:
import javax.inject.Provider;
public class MessageProvider implements Provider<String> {
@Override
public String get() {
return "Hello!";
}
}
服务:
import javax.inject.Inject;
import javax.inject.Provider;
public class GreetingService {
private final String message;
@Inject
GreetingService(Provider<String> provider) {
// GreetingService(MessageProvider provider) { // this works!
this.message = provider.get();
}
public String greeting() {
return message;
}
}
测试:
import org.junit.Test;
import static org.junit.Assert.*;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class GreetingServiceTest {
@Test
public void testSomeMethod() {
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
ctx.register(MessageProvider.class);
ctx.register(GreetingService.class);
ctx.refresh();
GreetingService bean = ctx.getBean(GreetingService.class);
String message = bean.greeting();
assertNotNull(message);
}
}
这是错误消息:
创建名为“greetingService”的 bean 时出错:通过构造函数实例化 bean 失败;嵌套异常是 org.springframework.beans.BeanInstantiationException: 无法实例化 [GreetingService]: 构造函数抛出异常;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type of [java.lang.String] found for dependency: 预计至少有 1 个 bean 有资格作为此依赖项的自动装配候选者。依赖注释:{}