В моем приложении Spring Boot 2.0.2 я пытаюсь внедрить компонент, унаследованный от абстрактного класса, который реализует интерфейс, и он не работает.
Код:
Аннотация компонента: (Нужно ли ставить @Component?)
package app.project.service;
@Component
public abstract class AbstractStepService implements IStepService {
protected final void addTask() {
...
}
@Override
public StepDataDto launch() throws StepException {
...
}
}
Интерфейс:
package app.project.service;
public interface IStepService {
StepDataDto launch() throws StepException;
}
package app.project.service;
Компонент:
@Component
public class CStepServiceImpl extends AbstractStepService implements IStepService {
@PostConstruct
private void defineTasks() {
}
}
package app.project.service;
Тест Junit:
@RunWith(SpringRunner.class)
@SpringBootTest
public class CStepServiceTest {
@Autowired
@Qualifier("cStepServiceImpl")
private IStepService service;
}
package app.project;
Применение:
@SpringBootApplication
@ComponentScan(basePackages ={"app.project.service"})
public class MyApplication {}
Сообщение об ошибке призапуск моего теста Junit:
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'app.project.service.IStepService' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true), @org.springframework.beans.factory.annotation.Qualifier(value=cStepServiceImpl)}
Есть идеи?
Спасибо