spring – 如何自动连接数据源?
我总是遇到autowire和DI的问题,所以我希望有人可以帮忙,因为我已经被困了几天了。
这是代码:
@Service public class TicketsController implements Controller { private TicketManager ticketManager; @Autowired public void setTicketManager(TicketManager ticketManager) { this.ticketManager = ticketManager; } ... } @Service public class SimpleTicketManager implements TicketManager { private TicketsDao ticketsDao; @Autowired public void setTicketsDao(TicketsDao ticketsDao) { this.ticketsDao = ticketsDao; } ... } @Repository public class JdbcTicketDao implements TicketsDao { private DataSource dataSource; @Autowired public void setDataSource(DataSource dataSource) { this.dataSource=dataSource; this.jdbcTemplate = new JdbcTemplate(this.dataSource); } ... } public final class AppContext { ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml"); BeanFactory factory = context; TicketsController ticketsController = (TicketsController) factory.getBean("ticketsController"); } ... }
在我的beans.xml中,我得到了:
这不起作用,我得到:
Error creating bean with name 'jdbcTicketDao': Injection of autowired dependencies failed ... nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [javax.sql.DataSource] found for dependency.`
有人可以帮帮忙吗? 我究竟做错了什么? 似乎自动assembly一直工作,直到下一步注入dataSource时失败。
编辑 :我正在玩代码,并在setDataSource()之前忘了@Autowire,但它应该在那里。
也许你错过了配线配置,试试吧
这将是由于bean实例创建的顺序。 您的DAO已在创建dataSource实例之前实例化。
之前保留数据源bean定义
另一种方法是,在单独的xml中定义您的dataSource定义并导入之前
试试org.apache.commons.dbcp.BasicDataSource
:
我使用JPA,所以通常更喜欢创建EntityManagerFactory并使用它
看起来你正在使用Spring 2.0
但我认为context:component-scan
是在Spring 2.5
中引入的。 也许将spring xml-config和spring依赖项更新为2.5
?
更改
至
该属性称为driverClassName
,而不是driverClass
。
此外,您不需要多个context:component-scan
元素您可以更改
至