applicationContext.xml配置文件如下:<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<constructor-arg>
<ref bean="dataSource" />
</constructor-arg>
</bean>
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="oracle.jdbc.OracleDriver" />
<property name="url">
<value><![CDATA[jdbc:oracle:thin:@(description=(address_list=(address=(protocol=TCP)(port=1521)(host=192.168.1.201)))(connect_data=(SERVER = orcl)(SERVICE_NAME = orcl)))]]></value>
</property>
<property name="username" value="oms" />
<property name="password" value="oms" />
</bean>

<bean id="test" class="com.yi.test.Test">
<property name="template" ref="jdbcTemplate"></property>
</bean>java代码:private JdbcTemplate template;
public void work() {
//在这里包空指针异常
List<Map> list = template.queryForList("select * from OMS_ROLE_INFO");
for (Map map : list) {
System.out.println(map.get("jsmc"));
}
}
public JdbcTemplate getTemplate() {
return template;
}
public void setTemplate(JdbcTemplate template) {
this.template = template;
}public static void main(String[] args) throws SQLException {
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
new Test().work();
}求解

解决方案 »

  1.   


    new Test().work(); 
    这句话有问题,既然用spring管理你的bean了,就不要自己new了,自己new的spring不会帮你注入的
    应该用Test test = (Test) context.getBean("test");
    test.work();
      

  2.   

    正解,new 出来的对象不在spring ioc容器之中,如何去访问内部资源。
      

  3.   

    <bean id="test" class="com.yi.test.Test">         
        <property name="template" ref="jdbcTemplate"></property>     
    </bean> 楼上都正解,因为这个id为test的bean配置没有被真正用到(new方式无法触发容器初始化),尤其是其中的ref属性