3

Spring 3 と Hibernate 4 を使用しています

私は次のクラス構造を持っています

public interface GenericDAO<T> {

    public void create(T entity);
    public void update(T entity);
    public void delete(T entity);
}

DAO クラス

public interface EmployeeDAO extends GenericDAO<Employee>  {

    public void findEmployee(EmployeeQueryData data);
}

DAO 実装クラス

@Repository("employeeDAO")
public abstract class EmployeeDAOImpl implements EmployeeDAO {

protected EntityManager entityManager;

@Override
public void findEmployee(EmployeeQueryData data) {

...... code

}

私が直面している問題は、展開しようとすると、次の例外が発生することです。削除しabstractてからEmployeeDAOImpl削除すると、アプリケーションはエラーなしでデプロイされます。したがって、クラスを作成することはできません。または、DAO 実装ですべてのメソッドを実装する必要があります。extends GenericDAO<Employee>EmployeeDAOabstractEmployeeDAOImplGenericDAOabstract

Error creating bean with 
name 'employeeService': Injection of autowired dependencies failed; \
nested exception is org.springframework.beans.factory.BeanCreationException:
Could not autowire field: test.dao.EmployeeDAO 
test.service.EmployeeServiceImpl.employeeDAO; nested exception is
org.springframework.beans.factory.NoSuchBeanDefinitionException: 
No matching bean of type [test.dao.EmployeeDAO] found for dependency: 
expected at least 1 bean which qualifies as autowire candidate for 
this dependency. Dependency annotations: 
{@javax.inject.Inject()}.

編集 1

GenericDAOImpl

public class GenericDAOImpl<T> implements GenericDAO<T> {    

    public void create(T entity) {
    }       
    public void update(T entity) {
    }
    public void delete(T entity) {
    }

EmployeeDAOImpl

public class EmployeeDAOImpl extends GenericDAOImpl<Employee> implements EmployeeDAO {
4

3 に答える 3

3

Java (および結果として Spring) は、抽象クラスのインスタンスを作成できません。Java でインスタンスを作成できるようになる前に、すべてのメソッドに実装が必要です。そうしないと、メソッドを呼び出そうとしたときに実行時エラーが発生します。EmployeeDAOImpl から「abstract」を削除し、GenericDAO から継承されたメソッドを実装する必要があります。

于 2013-03-07T11:16:30.007 に答える
2

なぜクラスの実装を抽象として宣言したいのですか? 概念的には矛盾しています。明らかに、Spring はそれをインスタンス化できず、失敗します。

于 2013-03-07T11:15:00.150 に答える
1

EmployeeDAOImpl またはその他の注釈付きクラス パッケージが、次のタグの spring context xml で言及されているかどうかを確認します。これが行われない限り、注釈は読み取られず、初期化されません。

<context:component-scan base-package="com.app.service" />
于 2013-03-07T11:12:51.463 に答える