Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 弹簧靴:“;没有类型为的合格bean。。。“发现”;当自动布线混凝土类_Java_Spring_Hibernate_Spring Mvc_Spring Boot - Fatal编程技术网

Java 弹簧靴:“;没有类型为的合格bean。。。“发现”;当自动布线混凝土类

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运行,我想用这个测试我的

我正在使用SpringBoot和SpringBootJPA编写一个组件。我有这样的设置:

界面:

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”)