接口:
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请问怎么回事啊
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请问怎么回事啊
把bean的类名写的是接口怎么可能对啊
<bean id="CodedbDAO" class="com.zjm.study.dao.CodedbDAO">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>你无非也就是要用CodedbDAO这里面的方法而已。
bean这个节点是要实例化class的,而接口是不能实例化的。
只需要实例化你的实现类,用接口去引用就好啦
ApplicationContext ctx = new ClassPathx......//实例化spring容器
ICodedbDAO codedbDAO = ctx.getBean("CodedbDAO");//用接口引用实现类
就是这样,spring注入,写的时候小心点啊
<bean id="CodedbDAO" class="com.zjm.study.dao.CodedbDAO">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
红色的是错误注入 绿色的是正确的 接口怎么可以注入的类 啊???用的话就得改成下面绿色的这种
bean class 都是指的类
接口是不能这样配置的 接口也没必要配置,接口本身不需要注入
所以只用<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();
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>
<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>
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>就可以了。但是spring鼓励使用接口,那怎么实现呢。
可以在代码里这样实现:
ICodedbDAO icd = (ICodedbDAO)ctx.getBean("CodedbDAO");
icd.play();