【问题标题】:Using JdbcTemplate with a "Non-Spring-Bean" JNDI DataSource将 JdbcTemplate 与“非 Spring-Bean”JNDI 数据源一起使用
【发布时间】:2011-11-22 06:53:34
【问题描述】:

spring-framework-reference.pdf(与 spring-framework-3.1.0.M2 捆绑在一起)的第 342 页指出,“JdbcTemplate 可以通过使用 DataSource 引用的直接实例化在 DAO 实现中使用。”然而,它接着说,“DataSource 应该始终配置为 Spring IoC 容器中的 bean。”

有谁知道为什么不应该从 Spring 容器外部的普通 JNDI 查找中将 DataSource 提供给 JdbcTemplate,例如How to programatically use Spring's JdbcTemplate?

【问题讨论】:

  • 我猜是因为事务(如果 spring 正在管理它们,则在 JTA 容器之外)。更开明的人可以提出一些启示吗?

标签: spring jdbc datasource jndi


【解决方案1】:

“数据源应始终配置为 Spring IoC 容器中的 bean。”

这个注释似乎是为了澄清前面的陈述:

“JdbcTemplate 可以通过使用 DataSource 引用直接实例化在 DAO 实现中使用,或者在 Spring IoC 容器中配置并作为 bean 引用提供给 DAO。”

我相信这些语句试图传达的信息是,当您在 Spring 中配置 DAO 时,您可以:

  1. 直接将DataSource注入DAO,自己在代码中创建JdbcTemplate,或者
  2. 您也可以将 JdbcTemplate 设为 Spring bean,将 DataSource 注入 JdbcTemplate,并将 JdbcTemplate 注入 DAO。

然后,注释意味着如果 Spring 正在管理 DAO 及其依赖项,则无论哪种情况,DataSource 都必须是 Spring bean,因为它需要被注入 DataSource 以用于构造 JdbcTemplate(案例 1 ) 或 JdbcTemplate 本身(案例 2)。

我并不认为 JdbcTemplate 中使用的 DataSource 必须始终由 Spring 管理,并且只能由 Spring 管理。这张纸条确实给人这样的印象。可能值得提交一个错误。

【讨论】:

  • Ryan,看来您可以“手动”使用 JdbcTemplate(即完全在 Spring 容器之外)。有机会我会为春天的人写一些东西。谢谢!
猜你喜欢
  • 2013-07-25
  • 2013-04-10
  • 1970-01-01
  • 2016-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-28
  • 2020-07-19
相关资源
最近更新 更多