本方法的前提是配置文件没有问题,但却报空指针异常
我的配置文件如下:
<?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:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<property name="url"
value="jdbc:oracle:thin:@localhost:1521:orcl" />
<property name="username" value="system" />
<property name="password" value="+1101+" />
</bean>
<!-- spring的ibatis 配制 -->
<bean id="sqlMapClient"
class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation" value="classpath:/sqlMapConfig.xml" />
<property name="dataSource" ref="dataSource" />
</bean>
<!-- spring 的事务处理类配置 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource">
<ref local="dataSource" />
</property>
</bean>
<!-- 实体DAO类 -->
<bean id="userDAO" class="test.UserDAO">
<property name="sqlMapClient">
<ref local="sqlMapClient" />
</property>
</bean>
<!-- Struts2 action类 -->
<bean id="user" class="test.User" >
<property name="userdao">
<ref bean="userDAOProxy"/>
</property>
</bean>
<bean id="name" class="test.User">
<property name="name" value="张大三"/>
</bean>
<!-- 实体DAO类的代理类 -->
<bean id="userDAOProxy"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager">
<ref bean="transactionManager" />
</property>
<property name="target">
<ref local="userDAO" />
</property>
<property name="transactionAttributes">
<props>
<prop key="insert*">PROPAGATION_REQUIRED</prop>
<prop key="select*">PROPAGATION_REQUIRED</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
</beans>
仔细观察上面的配置文件确实找不到任何错误,但一运行就报空指针异常,经过lcsky100、lxbccsu等人的热心帮助,总于发现了是由于bean的id大小写的问题
解决办法如下:
将实体DAO类部分<bean id="userDAO" class="test.UserDAO">中的id改成小写即:id="userdao"
将实体DAO类的代理类部分
<property name="target">
<ref local="userDAO" />
</property>
<ref local="userDAO" />
</property>
中的<ref local="userDAO" />改为<ref local="userdao" />就OK了
不要问我为什么,因为我都感觉莫名其妙!!!!