Я потратил часы, пытаясь выяснить, почему мой код выдает следующее исключение.На данный момент, я надеюсь, что кто-то может быть более умным, чем я, поскольку я теряю надежду ...;)
Причина: org.springframework.beans.factory.NoSuchBeanDefinitionException: Нет соответствиябин типа [com.ls.forecast.jpa.ForecastElementService] найден для зависимости: ожидается как минимум 1 бин, который квалифицируется как кандидат для автоматической передачи для этой зависимости.Аннотации зависимостей: {@ org.springframework.beans.factory.annotation.Autowired (обязательно = true), @ org.springframework.beans.factory.annotation.Quali fier (value = main)} в org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException (DefaultListableBeanFactory.java:924) при org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency (DefaultListableBeanFactory.java:793) в org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency (DefaultListableBeanFactory.Java: 707) в org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor $ AutowiredFieldElement.inject (AutowiredAnnotationBeanPostProcessor.java:480)
я посмотрел много тем без удачи.Кажется, все они настроены так же, как и мои.Я добавил @Service для реализации службы, добавил Qualifier, проверил, что ForecastElementServiceImpl действительно реализовал интерфейс ForecastElementService.
Интерфейс службы:
public interface ForecastElementService {
Collection<ForecastElement> retrieve(String date);
Collection<ForecastElement> retrieve();
}
Реализация интерфейса:
@Stateless
@TransactionAttribute(TransactionAttributeType.REQUIRED)
@Repository("forecastElementService")
@Service
public class ForecastElementServiceImpl implements ForecastElementService {
@PersistenceContext
protected EntityManager em;
@Override
@Cacheable("forecastElements")
public Collection<ForecastElement> retrieve(String date) {
String sql = null;
if(date != null) {
sql = " SELECT fe FROM ForecastElement fe JOIN FETCH fe.forecastType WHERE ?1 between fe.startDate and fe.endDate";
} else {
sql = " SELECT fe FROM ForecastElement fe JOIN FETCH fe.forecastType";
}
final TypedQuery<ForecastElement> query = em.createQuery(sql, ForecastElement.class);
return query.getResultList();
}
@Override
@Cacheable("forecastElements")
public Collection<ForecastElement> retrieve() {
return retrieve(null);
}
}
context.xml:
<bean id="forecastElementService" class="com.ls.forecast.jpa.ForecastElementServiceImpl">
<property name="entityManagerFactory" ref="entityManagerFactory"/>
И, наконец, класс теста неисправности - переменнаяcastElementService является той, которая выдает исключение.
@Repository
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({"*-context.xml"})
public class ModelJpaTest extends AbstractTransactionalJUnit4SpringContextTests {
//final Logger logger = LoggerFactory.getLogger(ModelJpaTest.class);
@Autowired
protected ForecastElementService forecastElementService;
@Autowired
@Qualifier("basicDataSource")
@Override
public void setDataSource(DataSource dataSource) {
super.setDataSource(dataSource);
}
@Test
public void LoadModelTest() {
assertNotNull("forecastElementService is null", forecastElementService);
Collection<ForecastElement> elements = forecastElementService.retrieve();
assertTrue(elements.size() > 0);
}
}
Буду очень признателен за любые идеи или помощь!
См. @ContextConfiguration ... Если я помещу ModelJpaTest-context.xml в папку ресурсов (test) моего проекта maven и отредактируюна:
@ContextConfiguration({"/ModelJpaTest-context.xml"})
Действительно смущен сейчас ...