GenericDAO
エンティティと主キーの型の 2 つのジェネリック型を持つインターフェイスを開発しました。
public interface GenericDAO<E, PK extends Serializable> {
PK save(E newInstance);
void update(E transientObject);
//typical dao methods
}
次に、休止状態 4 でそれらの実装を提供しました。
@Transactional
@Component
@Repository
public abstract class GenericDAOHibernate4<E, PK extends Serializable> implements GenericDAO<E, PK> {
public PK save(E newInstance) {
return (PK) factory.getCurrentSession().save(newInstance);
}
public E findById(PK id) {
return (E) factory.getCurrentSession().get(getEntityClass(), id);
}
//method implementations
}
次に、この抽象クラスを拡張する具象クラスを作成する必要があります。
@Component
@Transactional
@Repository
@Qualifier("userDAO")
public class UserDAO extends GenericDAOHibernate4<User, Long> {
@Autowired
public UserDAO(SessionFactory factory) {
super(factory);
}
@Override
protected Class<User> getEntityClass() {
return User.class;
}
}
次に、必要に応じて具体的な DAO を次のように挿入します。
public class UserService extends GenericService<User> {
@Autowired
public UserService(@Qualifier("userDAO") GenericDAO<User, Long> dao) {
super(dao);
}
しかし、具象 dao に別のメソッドを追加して具象クラスを注入する必要がある場合、Spring は依存関係を見つけることができません。これは起動時に失敗します:
public class UserService extends GenericService<User> {
@Autowired
public UserService(@Qualifier("userDAO") UserDAO dao) {
super(dao);
}
このエラーで:
Bean クラス [ddol.rtdb.services.UserService] をインスタンス化できませんでした: デフォルトのコンストラクターが見つかりません。ネストされた例外は java.lang.NoSuchMethodException: ddol.rtdb.services.UserService.() です
どのように注入すればよいですか?