Java 弹簧靴:“;没有类型为的合格bean。。。“发现”;当自动布线混凝土类
我正在使用SpringBoot和SpringBootJPA编写一个组件。我有这样的设置: 界面:Java 弹簧靴:“;没有类型为的合格bean。。。“发现”;当自动布线混凝土类,java,spring,hibernate,spring-mvc,spring-boot,Java,Spring,Hibernate,Spring Mvc,Spring Boot,我正在使用SpringBoot和SpringBootJPA编写一个组件。我有这样的设置: 界面: public interface Something { // method definitions } 实施: @Component public class SomethingImpl implements Something { // implementation } 现在,我有一个JUnit测试,它使用SpringJUnit4ClassRunner运行,我想用这个测试我的
public interface Something {
// method definitions
}
实施:
@Component
public class SomethingImpl implements Something {
// implementation
}
现在,我有一个JUnit测试,它使用SpringJUnit4ClassRunner
运行,我想用这个测试我的SomethingImpl
当我这样做的时候
@Autowired
private Something _something;
它是有效的,但是
@Autowired
private SomethingImpl _something;
导致测试失败,抛出一个NoSuchBeanDefinitionException
,消息为未找到依赖项类型为[com.example.SomethingImpl]的符合条件的bean:至少需要1个符合此依赖项autowire候选项条件的bean。依赖项注释:{@org.springframework.beans.factory.annotation.Autowired(required=true)}
但是在测试用例中,我想要显式地注入我的
somethingingmpl
,因为它是我想要测试的类。如何实现这一点?如果您想要一个特殊的bean,您必须使用@Qualifier
注释:
@Autowired
@Qualifier("SomethingImpl")
private Something _something;
我发现你也可以用
javax.inject
style DI做同样的事情:
@Named("myConcreteThing")
public class SomethingImpl implements Something { ... }
要将其注入的位置:
@Inject
@Named("myConcreteThing")
private Something _something;
这是由
@EnableAutoConfiguration
和@ComponentScan
正确识别的,我认为您需要在实现类中添加@Service。。像
@服务
公共类Something impl实现了一些东西{
//实施
}
我也有同样的问题,我可以通过向应用程序类添加组件扫描路径来解决这个问题
详情如下:
@ComponentScan(basePackages= {"xx.xx"})
谢谢,这正是我需要的。还必须注意,
@限定符中的字符串必须设置为@组件
,如@组件(“somethinginimpl”)
。