Spring MVC:如何从自定义接口实现 DAO

Posted

技术标签:

【中文标题】Spring MVC:如何从自定义接口实现 DAO【英文标题】:Spring MVC: how to implement DAO from custom interface 【发布时间】:2015-12-01 22:43:30 【问题描述】:

我的目的是实现自定义 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) 
        ...
    
...

正如我所说,由于 Spring 扫描仪无法找到 dao 类,它不起作用。

如何让它工作?没有implements 它可以正常工作。

Spring 扫描器配置:

<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

【问题讨论】:

你能分享你的弹簧扫描仪配置吗? 另外,你得到的错误是什么?\ 当我尝试在控制器中使用AccountDAO 时会发生这种情况。控制器位于tmp 目录中,该目录也在扫描中。 看起来您正在自动连接 AccountDao 尝试自动连接 AbstractDAOqualifier 您没有使用 Spring Data 是否有特定原因? 【参考方案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;

    .....

【讨论】:

不幸的是还是一样。我认为这个问题与弹簧继承规则有关,而不是有关扫描仪的问题,因为它无需继承即可工作 @Codemaster,对不起,我犯了一个错误,Controller 中的引用是AccountDAO 而不是AbstractDAO。现在试试.. 实际上并没有使用我拒绝使用接口

以上是关于Spring MVC:如何从自定义接口实现 DAO的主要内容,如果未能解决你的问题,请参考以下文章

关于spring mvc 3.0注解,注入失败的问题

如何从自定义实现中引用“正常”弹簧数据存储库?

Spring aop 拦截不到Dao

Spring 快速入门

mapper层是干啥的

java的框架spring如何配置分布式事务?