从spring 容器获得bean的问题
这时其中出错的一段代码:
applicationContext = ContextLoader.getCurrentWebApplicationContext();
1: Object object = applicationContext.getBean("roleService");
2:RoleServiceImpl roleService = (RoleServiceImpl)applicationContext.getBean("roleService");
运行到第一步的时候没问题可以找到名字为:roleService的bean;
到第二部时就出错了:
java.lang.ClassCastException: $Proxy3 cannot be cast to cn.edu.sjtu.telecom.scada.service.impl.RoleServiceImpl
如果不能强转得话,我得到这个bean就没什么意义了。
这时什么原因呢,如何可以转化为我想要的bean?
[解决办法]
RoleServiceImpl 是不是没有继承 RoleService
[解决办法]
一个大板块里面一般发一次就行了 很多都是直接点大板块帖子浏览的
[解决办法]
首先要搞明白你的roleService这个bean指向的是哪个类我的理解是应该指向RoleServiceImpl这个类,在用的时候应该这样写,
RoleService roleService = (RoleService)applicationContext.getBean("roleService");
这个问题还是应为你对面向对象的概念没有该清楚,接口虽然不是类,但它也遵循继承的机制。举个例子如果类B 继承自类A那么B的实例可以转化为A的类型应用,但是A的实例却不能转化为B的类型引用。
这是一个简单的例子
public class testDemo {
@Test
public void run() {
ClassPathXmlApplicationContext contxt = new ClassPathXmlApplicationContext(
"beans.xml");
UserDAO user = (UserDAO) contxt.getBean("userDAOImpl");
user.save("张三", 12);
A a = new A();
// B b = (B) a; //这一步是无法完成的
B b1 = new B();
A a1 = (A) b1;
}
}
class A {
}
class B extends A {
}