我花了數小時試圖弄清楚爲什麼我的代碼會引發以下異常。在這一點上,我希望有人可以更聰明比我,因爲我失去希望......;)彈簧測試的自動佈線問題
造成的:org.springframework.beans.factory.NoSuchBeanDefinitionException:類沒有匹配豆[com.ls.forecast.jpa.ForecastElementService]找到依賴關係:預計至少有1個bean有資格作爲此依賴關係的自動連線候選。依賴註釋:org.springframework.beans {@ org.springframework.beans.factory.annotation.Autowired(required = true),@ org.springframework.beans.factory.annotation.Quali fier(value = main)} 。 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"/>
最後是故障測試類 - forecastElementService變量是拋出異常的那個變量。
@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中在我的Maven項目和編輯到的資源(測試)文件夾:
@ContextConfiguration({"/ModelJpaTest-context.xml"})
真的被弄得現在...
這裏是整個context.xml文件: – user899757
它不會讓我發佈整個xml,我不能在接下來的8個小時發佈答案......我把它拿出來了。感謝您指出,但我仍然得到同樣的錯誤。實際上,我現在決定指向我的c:驅動器上的上下文文件,現在我得到一個不同的錯誤信息 - 請參閱對Jhakki的回覆。 – user899757