私のコードが次の例外を起こす理由を理解するのに何時間も費やしました。この時点で、私は誰かが、私は希望を失っていて、私は私よりももっと賢いことができることを望んでいないのです...;)によって引き起こさSpringテストの自動発行の問題
:org.springframework.beans.factory.NoSuchBeanDefinitionException:タイプの一致するBeanを[com.ls.forecast.jpa.ForecastElementService]が依存関係のために見つかりました:この依存関係のautowire候補となる少なくとも1つのbeanが必要です。依存関係注釈:{@ org.springframework.beans.factory.annotation.Autowired(必須= true)、@ org.springframework.beans.factory.annotation.Quali fier(値=メイン)} at 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で 。 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor $ AutowiredFieldElement.injectでresolveDependency(DefaultListableBeanFactory.java:707) (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);
}
}
洞察力や助力は非常に高く評価されます。
私はに私のMavenプロジェクトと編集のリソース(テスト)のフォルダにModelJpaTest-のcontext.xmlを配置すると参照@ContextConfiguration ...:
@ContextConfiguration({"/ModelJpaTest-context.xml"})
本当に...
今で混乱
ここに全体のcontext.xmlファイルがあります: – user899757
xml全体を投稿させず、次の8時間の回答を投稿できません...私はそれを取り出しました。それを指摘してくれてありがとうが、私はまだ同じエラーが発生します。実際には、私は今私のc:ドライブ上のコンテキストファイルを指すことに決めました。そして、今は別のエラーメッセージが表示されます.Jhakkiへの返信を参照してください。 – user899757