在自学Spring时,在使用getBean()时,会报com.sakura.dao.impl.BookDaoImpl cannot be cast to com.sakura.dao.BookDao at com.sakura.App2.main(App2.java:19)
这个错误表示,不能将一个实现类BookDaoImpl类强转为BookDao接口。这个错,通过反复看代码,发现是 BookDaoImpl没有实现BookDao接口。
代码结构如下:
其中dao中存在一个接口类BookDao,impl中实现接口实现类BookDaoImpl,App2为spring获取IoC容器获取bean代码如下
BookDao接口类
package com.sakura.dao;
/**
* @author sakura
* @date 2022年10月18日-星期二-22:24
* @description 接口类
*/
public interface BookDao {
public void save();
}
BookDaoImpl接口实现类
package com.sakura.dao.impl;
import com.sakura.dao.BookDao;
/**
* @author sakura
* @date 2022年10月18日-星期二-22:22
* @description BookDao接口实现类
*/
public class BookDaoImpl implements BookDao {
public void save(){
System.out.println("book dao save...");
}
}
bean配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 配置bean
此处配置实现类,需要使用该实现类造对象
通过id找到对应的实现类
-->
<bean id="bookDao" class="com.sakura.dao.impl.BookDaoImpl"/>
<!--
bean标签表示配置bean
id属性表示给bean取名字
class属性表示给bean定义类型
-->
</beans>
获取IoC容器,得到bean文件
package com.sakura;
import com.sakura.dao.BookDao;
import com.sakura.dao.impl.BookDaoImpl;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* @author sakura
* @date 2022年10月19日-星期三-16:04
* @description 获取Bean
*/
public class App2 {
public static void main(String[] args) {
//3、获取IoC容器
//是一个接口,new一个ClassPathXmlApplicationContext,获得配置得到的application.xml文件
ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
//4.获取bean
BookDao bookDao = (BookDao) ctx.getBean("bookDao");
bookDao.save();
}
}
其中getBean()方法有两种实现方法:
一种就直接强转为接口类BookDao
BookDao bookDao = (BookDao) ctx.getBean("bookDao");
另外一种是在getBean()文件中默认设定获得对象类型:
BookDao bookDao = (BookDao) ctx.getBean("bookDao","BookDaoImpl.class");
最近天天都是课,所有更新比较缓慢。
希望此次的分享可以帮助到你,后续博主会更新更多关于ssm的内容,如果哪天有空,博主会更新mybatis的全套内容。