web-dev-qa-db-ja.com

Spring Boot:具象クラスの自動配線時に「タイプの適格なBeanが見つかりません...」が表示される

Spring BootおよびSpring Boot JPAを使用してコンポーネントを作成しています。私はこのような設定をしています:

インターフェース:

_public interface Something {
    // method definitions
}
_

実装:

_@Component
public class SomethingImpl implements Something {
    // implementation
}
_

これで、_SpringJUnit4ClassRunner_で実行するJUnitテストができました。これを使用してSomethingImplをテストしたいと思います。

私がする時

_@Autowired
private Something _something;
_

動作しますが、

_@Autowired
private SomethingImpl _something;
_

テストが失敗し、メッセージNo qualifying bean of type [com.example.SomethingImpl] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}とともにNoSuchBeanDefinitionExceptionがスローされます

ただし、テストケースでは、テストしたいクラスなので、明示的にSomethingImplを挿入します。どうすればこれを達成できますか?

7
rabejens

特別なBeanが必要な場合は、@Qualifierアノテーションを使用する必要があります。

@Autowired
@Qualifier("SomethingImpl")
private Something _something;
5
Jens

@Serviceを実装クラスに追加する必要があると思います。

@Service public class SomethingImpl implements Something { // implementation }

4
Ravi Macha

javax.injectスタイルのDIでも同じことができると思いました。

@Named("myConcreteThing")
public class SomethingImpl implements Something { ... }

それを注入したい場所:

@Inject
@Named("myConcreteThing")
private Something _something;

これは、@EnableAutoConfigurationおよび@ComponentScanによって正しく取得されます。

4
rabejens

同じ問題があり、次のようにApplicationクラスにコンポーネントスキャンパスを追加することで問題を解決できました。

@ComponentScan(basePackages= {"xx.xx"}) 
1
Ramzi Guetiti