接口:
package com.zjm.study.iface;import java.util.List;import com.zjm.study.vo.Codedb;public interface ICodedbDAO {
//...........
}实现类:
public class CodedbDAO extends HibernateDaoSupport implements ICodedbDAO {
//...........
}ApplicationContext.xml:
<bean id="ICodedb" class="com.zjm.study.iface.ICodedbDAO" />
<bean id="CodedbDAO" class="com.zjm.study.dao.CodedbDAO">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>启动服务器报的错误:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'ICodedb' defined in ServletContext resource [/WEB-INF/classes/applicationContext.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.zjm.study.iface.ICodedbDAO]: Specified class is an interface请问怎么回事啊

解决方案 »

  1.   

    <bean id="ICodedb" class="com.zjm.study.iface.ICodedbDAO" />
     把bean的类名写的是接口怎么可能对啊
      

  2.   

    class指定的是实现类,而不是接口
      

  3.   

    呵呵,lz还想注入接口啊??class的路径不能写成接口的路径的。所以我感觉你用这一个就可以了
     <bean id="CodedbDAO" class="com.zjm.study.dao.CodedbDAO">
            <property name="sessionFactory">
                <ref bean="sessionFactory" />
            </property>
        </bean>你无非也就是要用CodedbDAO这里面的方法而已。
      

  4.   

     <bean id="ICodedb" class="com.zjm.study.iface.ICodedbDAO" />
    bean这个节点是要实例化class的,而接口是不能实例化的。
    只需要实例化你的实现类,用接口去引用就好啦
    ApplicationContext ctx = new ClassPathx......//实例化spring容器
    ICodedbDAO codedbDAO = ctx.getBean("CodedbDAO");//用接口引用实现类
      

  5.   

    spring的依赖注入,就是在实例化bean的时候,根据配置文件把该bean的依赖关系同时也实例化进来也就是说这是一个实例化的过程,接口是不能实例化的。请在配置文件中去掉第一行
      

  6.   


      就是这样,spring注入,写的时候小心点啊 
      

  7.   

      <bean id="ICodedb" class="com.zjm.study.iface.ICodedbDAO" />
        <bean id="CodedbDAO" class="com.zjm.study.dao.CodedbDAO">
            <property name="sessionFactory">
                <ref bean="sessionFactory" />
            </property>
        </bean>

    红色的是错误注入  绿色的是正确的  接口怎么可以注入的类 啊???用的话就得改成下面绿色的这种 
      

  8.   

     <bean id="ICodedb" class="com.zjm.study.iface.ICodedbDAO" /> 
    bean  class  都是指的类
    接口是不能这样配置的 接口也没必要配置,接口本身不需要注入
      

  9.   

    接口是在spring里不能实例化的 
    所以只用<bean id="CodedbDAO" class="com.zjm.study.dao.CodedbDAO">
            <property name="sessionFactory">
                <ref bean="sessionFactory" />
            </property>
        </bean>就可以了。但是spring鼓励使用接口,那怎么实现呢。
    可以在代码里这样实现:
    ICodedbDAO icd = (ICodedbDAO)ctx.getBean("CodedbDAO");
    icd.play();
      

  10.   

      
    ApplicationContext.xml修改成下面: 
     <bean id="ICodedb" class="com.zjm.study.iface.ICodedbDAO" abstract="true"/>
        <bean id="CodedbDAO" class="com.zjm.study.dao.CodedbDAO" parent="ICodedb">
            <property name="hibernateTemplate">
       <ref bean="hibernateTemplate"/>
    </property>
     </bean>
      

  11.   


    <bean id="ICodedb" class="com.zjm.study.iface.ICodedbDAO" /> <!-- 这行不对,不能用接口,而且这一行不需要,删除-->
    <bean id="CodedbDAO" class="com.zjm.study.dao.CodedbDAO"> <!--这个是对的,只要这里就可以了-->
        <property name="sessionFactory">
            <ref bean="sessionFactory" />
        </property>
    </bean>
      

  12.   

    <bean id="CodedbDAO" class="com.zjm.study.dao.CodedbDAO">
            <property name="sessionFactory">
                <ref bean="sessionFactory" />
            </property>
        </bean>就可以了。但是spring鼓励使用接口,那怎么实现呢。 
    可以在代码里这样实现: 
    ICodedbDAO icd = (ICodedbDAO)ctx.getBean("CodedbDAO"); 
    icd.play();