自动装配Jdbc模板

时间:2013-09-27 16:56:27

标签: spring spring-mvc jdbctemplate

我正在尝试自动连接JDBC模板,我得到一个空指针异常(模板为空)。可能是什么问题呢?

@Autowired
template JdbcTemplate;

这是我的应用程序上下文xml:

<bean ..>
    <mvc:annotation-driven />

            <context:component-scan base-package="igate.dto" />
                <context:component-scan base-package="igate.dao" />
                    <context:component-scan base-package="igate.service" />
                        <context:component-scan base-package="igate.controller" />
                <context:component-scan base-package="igate.logs" />
                    <context:component-scan base-package="igate.testcases" />


    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
          <property name="prefix" value="/"/>
          <property name="suffix" value=".jsp" />
            </bean> 


    <bean id="ds" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
        <property name="url" value="jdbc:oracle:thin:@172.21.17.5:1521:oraten" />
        <property name="username" value="lab01trg21" />
        <property name="password" value="lab01oracle" />
    </bean>

    <bean id="template" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="ds"/>
    </bean>

</beans>

3 个答案:

答案 0 :(得分:6)

而不是这段代码:

 @Autowired
 template JdbcTemplate;

你需要:

  @Autowired
  JdbcTemplate template ;

答案 1 :(得分:4)

  1. 您尝试注入的bean不在spring环境中;
  2. 没有JdbcTemplate的设置器
  3. 您尝试在模板被注入之前在构造函数中使用模板

答案 2 :(得分:2)

此错误的一个原因是将自动装配与手动混合 创造豆类。

例如,您有一个自动装配bean的服务类。

B

但是后来有了

class A : public class QObject {
  Q_OBJECT
public:
  A(QObject* parent=Q_NULLPTR);
  const B* getB() const; // Return a reference to B that cannot be changed but can be used to expose B's slots and signals
signals:
private slots:
private:
  B* workerObj;
  QThread worker;
  QTimer workerTimer;
}

class ThirdParty : public class QWidget {
  Q_OBJECT
public:
  ThirdParty(QObject* parent=Q_NULLPTR) {
    // Init A

    // Connect to B directly!
    connect(this->A->getB(), SIGNAL(signalData(int)), this, SLOT(slotGetData(int)));
  }
private slots:
  // Connect B::signalData(int x) to this slot and do something with the x (change UI, whatever)
  void slotGetData(int x);
private:
  A* integrationObj;
}
你这样做:

B