我的demo是用spring+ibatis做的,Test类是入口,我运行时就出现空指针异常,不知道为什么
可能注入不了
请大侠解答!!!下面是代码:
 Level.java是一个表的映射类,有levelid,levelname,description这些属性,还有get,set方法
1>,Level.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap 
    PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" 
    "http://www.ibatis.com/dtd/sql-map-2.dtd">
<sqlMap namespace="Level">
    <typeAlias alias="level" type="lingo.bean.Level" />
    <select id="getLevel" parameterClass="lingo.bean.Level"
        resultClass="lingo.bean.Level">
        <![CDATA[    select levelid,levelname,description from level   where levelid = #levelid#   ]]>
    </select>
   <select id="getAllLevel" resultClass="lingo.bean.Level" parameterClass="lingo.bean.Level">
        <![CDATA[  select levelid,levelname,description from level  ]]>
   </select>
    <update id="updateLevel" parameterClass="level">
        <![CDATA[   UPDATE level  SET levelname=#levelname#, description=#description# WHERE levelid = #levelid# ]]>
    </update>
    <insert id="insertLevel" parameterClass="level">
        INSERT INTO level ( levelid, levelname,description) VALUES ( #levelid#, #levelname#,#description# )</insert>
    <delete id="deleteLevel" parameterClass="java.lang.String">
        delete from level where levelid=#levelid#
    </delete>
</sqlMap>2>,SqlMapConfig.xml<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN" "http://www.ibatis.com/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
  <settings
    cacheModelsEnabled="true"
    lazyLoadingEnabled="true"
    enhancementEnabled="true"
    maxSessions="64"
    maxTransactions="8"
    maxRequests="128"
    useStatementNamespaces="true"/><transactionManager type="JDBC">
        <dataSource type="SIMPLE">
            <property name="JDBC.Driver" value="com.mysql.jdbc.Driver" />
           <property name="JDBC.ConnectionURL" value="jdbc:mysql://localhost:3306/lingo" />
           <property name="JDBC.Username" value="root" />
           <property name="JDBC.Password" value="root" />
            <property name="Pool.MaximumActiveConnections" value="10" />
            <property name="Pool.MaximumIdleConnections" value="5" />
            <property name="Pool.TimeToWait" value="500" />
        </dataSource>
    </transactionManager>
  <sqlMap resource="lingo/bean/Level.xml"/></sqlMapConfig>下面是spring的配置文件applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
 
 <beans>
     <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<!--配置连接数据库的基本信息-->
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:mysql://localhost:3306/lingo</value>
</property>
<property name="username">
<value>root</value>
</property>
<property name="password">
<value>root</value>
</property>
</bean>
  <!--   <bean id="sqlMap" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
     <property name="configLocation">
        <value>classpath:lingo/bean/SqlMapConfig.xml</value>
     </property>
     <property name="dataSource" ref="dataSource"/>
    </bean> -->
    
   <!-- ibatis工厂 -->
<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
    <property name="configLocation" value="classpath:lingo/bean/SqlMapConfig.xml"/>
    <property name="dataSource" ref="dataSource"/>
   </bean>
   <!-- 数据连接事务 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 拦截事务的方法设置 -->
<bean id="transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager" ref="transactionManager" />
<property name="transactionAttributes">
<props>
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="insert*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<!-- 拦截事务Beans设置-->
<bean
class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<value>*Impl</value>
</property>
<property name="interceptorNames">
<list>
<value>transactionInterceptor</value>
<!-- 此处增加新的Interceptor -->
</list>
</property>
</bean>
<!-- 通知器,用它来对属性值进行处理    -->
<bean
class="org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor">
<property name="transactionInterceptor"
ref="transactionInterceptor" />
</bean>
<bean id="test" class="lingo.dao.TestIOC">
</bean>
<!-- ibatisDAO实现类  -->
<bean id="levelDaoImpl" class="lingo.dao.LevelDaoImpl">
<property name="sqlMapClient" ref="sqlMapClient"/>
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- 处理业务逻辑的类 -->
 <bean id="servletBus" class="lingo.module.ServletTest">
    <property name="levelDao" ref="levelDaoImpl"/>
    
</bean>
   <!--/////////////////// -->
    
 </beans>
下面是dao层
ISprIbaDao是LevelDaoImpl的接口
3》,LevelDaoImpl.java
package lingo.dao;import java.util.List;import lingo.bean.Level;import org.springframework.orm.ibatis.SqlMapClientTemplate;
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;import com.ibatis.sqlmap.client.SqlMapClient;public class LevelDaoImpl extends SqlMapClientDaoSupport implements ISprIbaDao { public LevelDaoImpl() {
super();
} public void deleteLevel(String id) {
// TODO Auto-generated method stub
        
} public List getLevel() {
SqlMapClientTemplate sct = this.getSqlMapClientTemplate();
System.out.println(sct+"sct"+this.getDataSource());

List list = sct.queryForList("Level.getAllLevel");
return list;
} public Level getOneLevel(int id) {
System.out.println("****************");
Level level = new Level();
level.setLevelid(id);
SqlMapClientTemplate sct = this.getSqlMapClientTemplate();
if (sct != null) { level = (Level) sct.queryForObject("Level.getLevel", level);
}
return null;
}
}
下面是MyFactoryBean.java
package lingo.dao;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
public class MyFactoryBean{
private static MyFactoryBean instance;
private ApplicationContext ctx = null; private MyFactoryBean(){
this.init();
} public static MyFactoryBean getInstance(){
if(instance == null){
instance = new MyFactoryBean();
}
return instance;
} public void init(){
ctx = new FileSystemXmlApplicationContext("src/applicationContext.xml");
} public Object getBean(String id){
return ctx.getBean(id);
}
}
下面是Test.java
package lingo.dao;import lingo.bean.Level;public class Test{
public Level getLevel(){
System.out.println(this.getBeanFactory());
ISprIbaDao dao=((ISprIbaDao)getBeanFactory().getBean("levelDaoImpl"));
return dao.getOneLevel(24);

}
public MyFactoryBean getBeanFactory(){
return MyFactoryBean.getInstance();
}

public static void main(String[] args){
Test test = new Test();
     Level level=test.getLevel();
     System.out.println(level.getLevelname());
}
}

解决方案 »

  1.   

    就是这样:
    2009-6-4 14:15:16 org.springframework.context.support.AbstractApplicationContext prepareRefresh
    信息: Refreshing org.springframework.context.support.FileSystemXmlApplicationContext@e5855a: display name [org.springframework.context.support.FileSystemXmlApplicationContext@e5855a]; startup date [Thu Jun 04 14:15:16 CST 2009]; root of context hierarchy
    2009-6-4 14:15:16 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
    信息: Loading XML bean definitions from file [E:\java\workspace\spribaext\src\applicationContext.xml]
    2009-6-4 14:15:17 org.springframework.context.support.AbstractApplicationContext obtainFreshBeanFactory
    信息: Bean factory for application context [org.springframework.context.support.FileSystemXmlApplicationContext@e5855a]: org.springframework.beans.factory.support.DefaultListableBeanFactory@193a66f
    2009-6-4 14:15:17 org.springframework.context.support.AbstractApplicationContext$BeanPostProcessorChecker postProcessAfterInitialization
    信息: Bean 'org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator' is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
    2009-6-4 14:15:17 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
    信息: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@193a66f: defining beans [dataSource,sqlMapClient,transactionManager,transactionInterceptor,org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator,org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor,test,levelDaoImpl,servletBus]; root of factory hierarchy
    2009-6-4 14:15:17 org.springframework.jdbc.datasource.DriverManagerDataSource setDriverClassName
    信息: Loaded JDBC driver: com.mysql.jdbc.Driver
    构造方法
    lingo.dao.LevelDaoImpl@1a85d38testestesst
    lingo.dao.MyFactoryBean@8046f4
    ****************
    Exception in thread "main" java.lang.NullPointerException
    at lingo.dao.Test.main(Test.java:40)
      

  2.   

    Exception in thread "main" java.lang.NullPointerException
    at lingo.dao.Test.main(Test.java:40) 在Test.java的40行,你贴的源码里Test.java有40行吗?
      

  3.   

    上面的:lingo.dao.LevelDaoImpl@1a85d38testestesst别的类注入时我打印出来的,下面才是运行后的异常,
    我可以整个project都发给你看看
    2009-6-4 14:23:04 org.springframework.context.support.AbstractApplicationContext prepareRefresh
    信息: Refreshing org.springframework.context.support.FileSystemXmlApplicationContext@e5855a: display name [org.springframework.context.support.FileSystemXmlApplicationContext@e5855a]; startup date [Thu Jun 04 14:23:04 CST 2009]; root of context hierarchy
    2009-6-4 14:23:04 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
    信息: Loading XML bean definitions from file [E:\java\workspace\spribaext\src\applicationContext.xml]
    2009-6-4 14:23:05 org.springframework.context.support.AbstractApplicationContext obtainFreshBeanFactory
    信息: Bean factory for application context [org.springframework.context.support.FileSystemXmlApplicationContext@e5855a]: org.springframework.beans.factory.support.DefaultListableBeanFactory@193a66f
    2009-6-4 14:23:05 org.springframework.context.support.AbstractApplicationContext$BeanPostProcessorChecker postProcessAfterInitialization
    信息: Bean 'org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator' is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
    2009-6-4 14:23:05 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
    信息: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@193a66f: defining beans [dataSource,sqlMapClient,transactionManager,transactionInterceptor,org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator,org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor,test,levelDaoImpl,servletBus]; root of factory hierarchy
    2009-6-4 14:23:05 org.springframework.jdbc.datasource.DriverManagerDataSource setDriverClassName
    信息: Loaded JDBC driver: com.mysql.jdbc.Driver
    lingo.dao.MyFactoryBean@16dfa45
    ****************
    Exception in thread "main" java.lang.NullPointerException
    at lingo.dao.Test.main(Test.java:40)
      

  4.   

    要不我把整个demo发给你,你看下是不是我的配置配错了?