2015-09-06 70 views
0

我的目的是实现自定义DAO接口,这就是我所做的,但它似乎不起作用。Spring MVC:如何从自定义接口实现DAO

我的界面:

public interface AbstractDAO<T> { 

    void add(T object); 
    T load(Integer ID); 
    List<T> list(); 
    void update(T object); 
    void delete(Integer ID); 
} 

而且它的实现:

@Repository 
public class AccountDAO implements AbstractDAO<Account> { 

    @Autowired 
    private JdbcTemplate jdbcTemplate; 

    @Transactional 
    public void add(Account object) { 
     ... 
    } 
... 
} 

因为我告诉,这是行不通的,由于春天扫描器无法找到DAO类。

如何让这项工作?没有implements它工作正常。

春扫描仪配置:

<bean ...> 
    <context:component-scan base-package="dao" /> 
    <context:component-scan base-package="tmp" /> 
    <context:component-scan base-package="services" /> 
    <context:component-scan base-package="entities" /> 

    <mvc:resources mapping="/resources/**" location="/resources/" /> 

    <mvc:annotation-driven /> 
    <tx:annotation-driven /> 
    <task:annotation-driven /> 

    <import resource="spring-beans.xml"/> 
</bean> 

错误:

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: 
No qualifying bean of type [dao.AccountDAO] found for dependency: expected 
at least 1 bean which qualifies as autowire candidate for this dependency 
+0

你能分享你的春天扫描仪配置? – Udy

+0

@Udy,更新了// – WildDev

+0

另外,你得到的错误是什么?\ – Udy

回答

1

更改DAO实施:

@Repository("accountDAO") 
public class AccountDAO implements AbstractDAO<Account> { 

    @Autowired 
    private JdbcTemplate jdbcTemplate; 

    @Transactional 
    public void add(Account object) { 
     ... 
    } 
    ... 
} 

和使用的DAO像:

@Controller 
@RequestMapping(value = "") 
public class Controller 

    @Autowired 
    @Qualifier("accountDAO") 
    private AbstractDAO accountDAO; 

    ..... 
} 
+0

不幸的是依然如此。我认为这个问题比春天继承规则,而不是关于扫描器,因为它的工作原理没有继承 – WildDev

+0

@Codemaster,即时通讯抱歉,但我有一个错误,其中'Controller'的引用是'AccountDAO'而不是'AbstractDAO'。 现在试试.. – Udy

+0

NP我试过第一次correctlly – WildDev