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元素您可以更改