当前位置: 首页 > 面试题库 >

使用Spring JdbcTemplate-注入数据源vs jdbcTemplate

谈桐
2023-03-14
问题内容

根据Spring 文档,使用Spring
JdbcTemplate的步骤如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="
            http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context-3.0.xsd">

        <!-- Scans within the base package of the application for @Components to configure as beans -->
        <context:component-scan base-package="org.springframework.docs.test" />

        <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
            <property name="driverClassName" value="${jdbc.driverClassName}"/>
            <property name="url" value="${jdbc.url}"/>
            <property name="username" value="${jdbc.username}"/>
            <property name="password" value="${jdbc.password}"/>
        </bean>

        <context:property-placeholder location="jdbc.properties"/>

    </beans>

然后,

    @Repository
    public class JdbcCorporateEventDao implements CorporateEventDao {

        private JdbcTemplate jdbcTemplate;

        @Autowired
        public void setDataSource(DataSource dataSource) {
            this.jdbcTemplate = new JdbcTemplate(dataSource);
        }

        // JDBC-backed implementations of the methods on the CorporateEventDao follow...
    }

基本上,JdbcTemplate是使用数据源的setter在Component类内部创建的。

这样做有什么问题,因此应用程序中只有一个jdbcTemplate实例吗?

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"
    p:dataSource-ref="dataSource" 
/>

然后将jdbcTemplate本身直接注入到组件中

@Repository
public class JdbcCorporateEventDao implements CorporateEventDao {
    @Resource("jdbcTemplate")
    private JdbcTemplate jdbcTemplate;


    // JDBC-backed implementations of the methods on the CorporateEventDao follow...
}

有没有理由不能将jdbcTemplate本身直接注入到组件类中?

SGB


问题答案:

你可以做你想做的。JdbcTemplate的javadoc甚至清楚地说明了这一点:

可以通过直接实例化DataSource引用在服务实现中使用,也可以在应用程序上下文中进行准备并作为bean引用提供给服务。



 类似资料:
  • 有一些示例可以使用多个数据源: 但他们不使用实体管理器。是否有可能得到这样的东西: 谢了。

  • 我有一个Spring Boot(面向批处理)应用程序,它使用一个数据源来完成批处理作业,并将内容写入数据库。 我在类似: 问题是,当我尝试将数据源注入一个Spring配置文件时: ...它告诉我: 无法自动连线。存在多个“DataSource”类型的bean。 Beans:数据源 我还尝试注入数据源,例如: ...但是没有运气:(,尽管这两个数据源的问题最终消失了。 有什么线索可以“绕过”吗?

  • 问题内容: 我有hibernate通过JNDI数据源连接到数据库。 我的目的:使用JNDI注册数据源以测试DAO层。 例 hibernate配置 在测试类中获取SessionFactory: 作为结果: 要注册JNOI,我使用示例(http://www.roseindia.net/tutorial/java/jdbc/registeringthedatasourcewithjndi.html) 请

  • 下面是我的配置类。 应用程序.属性

  • 这可能是一个很新手的问题,但是我搜索过,要么是我的理解有很大的差距,要么是在做一些我想不通的错误的事情。 在我的上下文文件中,这里有一个节选 现在我在myBeanOne中: 当我试图在调用setDataSource的行上执行该命令时,我会得到以下错误: 行中: 我尝试了十种不同的配置来使其工作,但我似乎做不到。感谢任何协助,谢谢。 我知道这是一个非常基本的问题,但我正在与之斗争。 谢谢你的耐心。

  • (子资源)再次基于构造函数中传入的用户实现为普通的Jersey类。 但是,我的子资源也需要访问字段(如或)。根据Jersey文档,字段不会为子资源注入,因为它们的生命周期未知(文档似乎是真的)。 这对我来说是非常不可原谅的:我真的需要访问这些值。 作为一种解决办法,我目前将这些值作为额外的构造函数参数传递给我的子资源,我认为这一切都不舒服。 我能以某种方式创建这些映射吗? 问题是,我不知道如何在G