私は現在、Hibernateを統合したSpringMVCプロジェクトに取り組んでいます。純粋なSpringMVC部分(DispatcherServlet +リクエストマッピング)は正常に機能します。さて、私が対処しなければならない問題は非常に奇妙です。「Java Persistence with Hibernate」を読み、本で説明されているのと同様の方法で永続性レイヤーを設計しようとしています。つまり、2つの並列階層で設計しました。1つは実装クラス用で、もう1つはインターフェイス用です。
したがって、GenericDaoインターフェイスを実装するGenericDaoImplという名前の抽象クラスがあります。次に、GenericDaoImplを拡張し、AdvertisementDaoインターフェイス(GenericDaoを拡張)を実装するAdvertisementDaoImplという名前の具象クラスがあります。
次に、サービスBean(@Serviceでマークされたクラス)で、daoクラスを自動配線します。
これが私の問題です:
- インターフェイスを実装するが、抽象GenericDaoImplクラスを拡張しないDAOクラスの自動配線:OK
- AdvertisementDaoインターフェースを実装し、抽象GenericDaoImplクラスを拡張するAdvertisementDaoImplを自動配線すると、Bean初期化例外が発生します。
DAO階層の最上位にある抽象クラスは、一般的なCRUDメソッドのすべての定型コードを処理します。だから、絶対に残したいです。
誰かがそれについて説明がありますか?
これがコードの抜粋です:
public abstract class GenericDaoImpl <T, ID extends Serializable> implements BeanPostProcessor, GenericDao<T, ID>{
@Autowired(required=true)
private SessionFactory sessionFactory;
private Session currentSession;
private Class<T> persistentClass;
...
}
@Repository
public class AdvertisementDaoImpl extends GenericDaoImpl<Advertisement, Long> implements AdvertisementDao {
...
public List<Advertisement> listAdvertisementByType(AdvertisementType advertisementType, Class<? extends Good> type) {
return null;
}
}
@Service
public class AdvertisementServiceImpl implements AdvertisementService{
@Autowired(required=false)
private AdvertisementDao advertisementDao;
public List<Advertisement> listAllAdvertisements() {
return null;
}
}
スタックトレースの最も関連性の高い部分は次のとおりです(少なくとも、そうだと思います)。
ネストされた例外はorg.springframework.beans.factory.BeanCreationExceptionです:フィールドを自動配線できませんでした:be.glimmo.service.AdvertisementService be.glimmo.controller.HomeController.advertisementService; ネストされた例外はjava.lang.IllegalArgumentExceptionです:be.glimmo.service.AdvertisementServiceフィールドbe.glimmo.controller.HomeController.advertisementServiceをbe.glimmo.dao.AdvertisementDaoImplに設定できません
そしてこれが私のSpring設定です(pastebin.comへのリンク):