不能直接new吧,spring配置中也没有“XXDAO”的BEAN,怎么测试我这个DAO类呢,比如getSqlMapClientTemplate().insert(XXX).

解决方案 »

  1.   


    不可能连DAO都没?
    ============================================
    读入Spring XML
    Dao dao = ApplicationContext.getBean("dao")
    dao.getSqlMapClientTemplate().insert(XXX).
      

  2.   

    spring配置里没有dao的bean?不明白什么意思
      

  3.   

     1.<bean id="testDao" class="login.dao.TestDAOImp">
           <property name="sqlMapClient" ref="sqlMapClient"></property>
        </bean>2.
    public class Test {
    public static void main(String[] args) {
    ApplicationContext ctx = new ClassPathXmlApplicationContext(
    "dao/beans.xml");
    UserDao dao = (UserDao) ctx.getBean("userDao");
    dao.query();
    }
    }
      

  4.   

    原来是我DAO里配掉了个sqlMapClient
    可以跑了,不过我加上事务控制后原来好好的DAO层又出了新的异常
    我就加上了红色的部分。外加几个JAR包2009-11-16 19:18:00 [INFO]-[org.springframework.cache.ehcache.EhCacheManagerFactoryBean] Shutting down EHCache CacheManager
    2009-11-16 19:18:00 [ERROR]-[org.springframework.web.context.ContextLoader] Context initialization failed
    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'passPortDao' defined in ServletContext resource [/WEB-INF/classes/config/applicationContext.xml]: Cannot resolve reference to bean 'client' while setting bean property 'sqlMapClient'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'client': FactoryBean threw exception on object creation; nested exception is java.lang.ClassCastException: com.ibatis.sqlmap.engine.impl.SqlMapClientImpl
    Caused by: 
    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'client': FactoryBean threw exception on object creation; nested exception is java.lang.ClassCastException: com.ibatis.sqlmap.engine.impl.SqlMapClientImpl
    Caused by: 
    java.lang.ClassCastException: com.ibatis.sqlmap.engine.impl.SqlMapClientImpl
    at com.jnlan.common.interceptor.MethodCacheInterceptor.invoke(MethodCacheInterceptor.java:42)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
    at $Proxy1.getObject(Unknown Source)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getObjectFromFactoryBean(AbstractBeanFactory.java:1246)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getObjectForBeanInstance(AbstractBeanFactory.java:1217)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:206)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:267)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:110)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1095)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:857)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:423)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:249)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:155)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:246)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:291)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:352)
    at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:244)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:187)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:49)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3827)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4334)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
    at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:920)
    at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:883)
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492)
    at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1138)
    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
    at org.apache.catalina.core.StandardService.start(StandardService.java:516)
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:566)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413
    applicationContext.xml
    <bean id="propertyConfigurer"
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <description>系统参数</description>
    <property name="locations">
    <list>
    <value>classpath:config/systeminit.properties
    </value>
    </list>
    </property>
    </bean>
    <!-- 配置dataSource -->
    <bean name="dataSource" class="org.logicalcobwebs.proxool.ProxoolDataSource">
    <property name="alias">
    <value>${jdbc.alias}</value>
    </property>
    <property name="driver">
    <value>${jdbc.driver}</value>
    </property>
    <property name="driverUrl">
    <value>${jdbc.driverUrl}</value>
    </property>
    <property name="user">
    <value>${jdbc.user}</value>
    </property>
    <property name="password">
    <value>${jdbc.password}</value>
    </property>
    <property name="maximumConnectionCount">
    <description>最大连接数生产环境应把该值设置为50</description>
    <value>${jdbc.maximumConnectionCount}
    </value>
    </property>
    <property name="minimumConnectionCount">
    <description>-最小连接数</description>
    <value>${jdbc.minimumConnectionCount}
    </value>
    </property>
    <property name="houseKeepingSleepTime">
    <description>proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回收,超时的销毁
    </description>
    <value>${jdbc.houseKeepingSleepTime}
    </value>
    </property>
    <property name="maximumActiveTime">
    <description>每次使用的最大时长(毫秒)</description>
    <value>${jdbc.maximumActiveTime}</value>
    </property>
    <property name="prototypeCount">
    <description>在没有超过最大连接数的情况下,保留的可用的连接数。
    </description>
    <value>${jdbc.prototypeCount}</value>
    </property>
    <property name="maximumConnectionLifetime">
    <description>连接的最大生命时间(包括沉睡和执行命令的时间)。
    </description>
    <value>${jdbc.maximumConnectionLifetime}
    </value>
    </property>
    <property name="overloadWithoutRefusalLifetime">
    <description>满负载时,等待的时长</description>
    <value>${jdbc.overloadWithoutRefusalLifetime}
    </value>
    </property>
    <property name="simultaneousBuildThrottle">
    <description>一次建链的数量,生产环境可设置为5</description>
    <value>${jdbc.simultaneousBuildThrottle}
    </value>
    </property>
    <property name="houseKeepingTestSql">
    <description>当连接为空闲连接时,用此条sql语句来测试是否空闲中
    </description>
    <value>${jdbc.houseKeepingTestSql}</value>
    </property>
    </bean>
    <!-- 配置ibatis -->
    <bean name="client"
    class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
    <property name="dataSource">
    <ref bean="dataSource" />
    </property>
    <property name="configLocation">
    <value>classpath:config/sql-map-config.xml</value>
    </property>

    </bean>

    <bean id="transactionManager"
    class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <description>数据库事务管理</description>
    <property name="dataSource" ref="dataSource" />
    </bean>

    <aop:config>
    <aop:advisor
    pointcut="execution(*  com.jnlan.accmanage.BO.*BO.*(..))"
    advice-ref="txAdvice" />
    </aop:config>

    <tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
    <tx:method name="*" propagation="REQUIRED" rollback-for="Exception" />
    </tx:attributes>
    </tx:advice>
     
    <bean name="passPortDao"  
            class="com.jnlan.accmanage.DAO.impl.PassPortImpl">   
    <property name="sqlMapClient" ref="client"/>
    </bean> 
    ....
      

  5.   

    今天早上来顶一下。
    去掉了<aop:config>
            <aop:advisor
                pointcut="execution(*  com.jnlan.accmanage.BO.*BO.*(..))"
                advice-ref="txAdvice" />
        </aop:config>
        
        <tx:advice id="txAdvice" transaction-manager="transactionManager">
            <tx:attributes>
                <tx:method name="*" propagation="REQUIRED" rollback-for="Exception" />
            </tx:attributes>
        </tx:advice>
    完全是没问题。
    加上之后就出现 sqlMapClient类型转换错误!
      

  6.   

    - -! 自己解决了。原来AOP方法增强不能针对GET和SET.可能这两个方法涉及到spring自己的IOC吧