在我的應用程序中,我使用的是泛型DAO模式。我的階級結構是這樣的:Autowiring + springDAO pattern在spring中的問題
域類 - POJO
package com.test.abc.def; @NamedQueries({------a couple of queries go here .......}) @Entity @Table(name = "NAME") public class Name implements Serializable { private String myName; ........ @Column(name = "MY_NAME", nullable = false, length = 30) public String getMyName() { return this.myName; } public void setName(String myName) { this.myName= myName; } ........ }
對應於NamedQueries在上述領域的A類DAO接口
package com.test.abc.h; public interface INameDao extends IGenericDAO<...., ....> { ....method signature...... }
一個IGenericDAO接口
package com.test.abc.h; public interface IGenericDAO<T, PK extends Serializable> { ......... }
GenericDAO實現類
package com.test.abc.h.impl; @Repository @Scope(BeanDefinition.SCOPE_PROTOTYPE) public class GenericDAO<T, PK extends Serializable> implements IGenericDAO<T, PK> { ....method implemnetations ........ }
應用程序上下文:
<context:component-scan base-package="com.test.abc" /> <context:annotation-config /> <mvc:annotation-driven /> <mvc:default-servlet-handler />
服務類具有以下自動裝配聲明:
@Autowired private Name name; @Autowired private INameDAO nameDAO; ...... nameDAO.callToNamedQuery() - here I would like to call the named query present in Name class.
我看到下面的錯誤時,我嘗試st artup服務器:
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No
qualifying bean of type [com.test.abc.h.INameDAO] found for dependency: expected at
least 1 bean which qualifies as autowire candidate for this dependency. Dependency
annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
我在這裏錯過了什麼? 我試着將@Repository註釋添加到INameDAO中 - 並且也添加了Name域類。這沒有幫助。 還向名稱域類添加@Component註釋 - 這也沒有幫助。
我自動裝配INameDAO的原因是能夠調用名稱域類中存在的命名查詢。編輯我的問題以包含此信息。 – user811433
然後,您需要重構代碼,因爲Spring將嘗試按類型注入,並且您的GenericDAO不是類型INameDAO。使用您當前的定義,您可以使您的目標bean成爲常見類型IGenericDAO,但我希望您會失去GenericDAO中其他方法的可見性。無論哪種方式您目前的結構將無法正常工作。 – Romski
關於我需要改正的具體變化的任何建議? – user811433