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
尝试自动连接 AbstractDAO
和 qualifier
您没有使用 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的主要内容,如果未能解决你的问题,请参考以下文章