首先一个接口,一个类实现了这个接口,Spring托管了这个类。当用
类名 对象=(实现类类型) new ClassPathXmlApplicationContext("applicationContext.xml").getBean(beanName);
接收的时候应该用接口接受吧。当初学的时候是。但是下面这个是我遇见的:
UserBizImpl users = (UserBizImpl) new ClassPathXmlApplicationContext(
"applicationContext.xml").getBean("UserBizImpl");这个是用实现类接收的。照样能用。我在另一个再用实现类接收的时候就汇报 转换类型失败。不能理解。
大虾,帮忙理解下吧。谢谢
类名 对象=(实现类类型) new ClassPathXmlApplicationContext("applicationContext.xml").getBean(beanName);
接收的时候应该用接口接受吧。当初学的时候是。但是下面这个是我遇见的:
UserBizImpl users = (UserBizImpl) new ClassPathXmlApplicationContext(
"applicationContext.xml").getBean("UserBizImpl");这个是用实现类接收的。照样能用。我在另一个再用实现类接收的时候就汇报 转换类型失败。不能理解。
大虾,帮忙理解下吧。谢谢
解决方案 »
- spring mvc+hibernate所有页面检查是否已登录,应该怎么做
- java 为什么要设计抽象类
- 我想用servlet输出hmtl 从数据里面读出数据但是需要有分页功能
- Acegi(Spring Security) 权限不足的情况下诡异的跳转路径问题
- iBATIS和Spring的集成问题
- spring中如何使用加密的配置文件
- java中怎么才能知道每月的哪一天是星期几啊 ?
- **我这个问题是Spring上的问题********好好好好急急急急急急*********请高手们帮帮我呀!我在线等******
- ejb和struts的问题
- ejb事务请教
- 求将dom4j的document转换为String的方法
- SSH项目错误
"applicationContext.xml").getBean("UserBizImpl"));
import org.springframework.context.support.ClassPathXmlApplicationContext;import com.qixuejia.space.biz.NoticeBiz;
import com.qixuejia.space.biz.impl.NoticeBizImpl;
import com.qixuejia.space.entity.TNotice;public class test2 { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
NoticeBizImpl noticeBiz =(NoticeBizImpl)new ClassPathXmlApplicationContext("applicationContext.xml").getBean("NoticeBizImpl");
TNotice notice = noticeBiz.findNoticeById(0);
if (notice == null) {
System.out.println("没有该数据。");
}
else{
System.out.println(notice.getNoticeTime());
}
} catch (BeansException e) {
// TODO Auto-generated catch block
System.out.println(e.getMessage());
}
}}
报错:
Exception in thread "main" java.lang.ClassCastException: $Proxy43 cannot be cast to com.qixuejia.space.biz.impl.NoticeBizImpl
at com.qixuejia.adam.test.test2.main(test2.java:18)
<!--空间 - 通知内容依赖注入 -->
<bean id="NoticeBizImpl" class="com.qixuejia.space.biz.impl.NoticeBizImpl">
<property name="noticeDAO" ref="TNoticeDAO"></property>
</bean>下面这个可用,
<bean id="UserBizImpl" class="org.adam.biz.impl.UserBizImpl">
<property name="userDAO">
<ref bean="UsersDAO" />
</property>
</bean>
说说哪里错啦?
实现的接口应该和 org.adam.biz.impl.UserBizImpl这个类的接口一样
只是在Spring中取对象的时候一个会报转换失败。一个不失败。就像上面说的那样子。谢谢
NoticeBizImpl noticeBiz =(NoticeBizImpl)new ClassPathXmlApplicationContext("applicationContext.xml").getBean("NoticeBizImpl");这么说吧,可不可以这样
这里换成接口类型 noticeBiz =(这里换成接口类型)new ClassPathXmlApplicationContext("applicationContext.xml").getBean("NoticeBizImpl");
问下 你这个类 <bean id="NoticeBizImpl" class="com.qixuejia.space.biz.impl.NoticeBizImpl">
<property name="noticeDAO" ref="TNoticeDAO"></property>
</bean>是接口还是 实现类????
为什么不可以。
并且,上面的
UserBizImpl users = (UserBizImpl) new ClassPathXmlApplicationContext(
"applicationContext.xml").getBean("UserBizImpl");这个为什么可以。
他们都是一样的实现自己的接口,一样的被Spring托管。一个可用一个不可用。
你说的那个是实现类,带着Impl呢
用实现类 接收 肯定不对,你看Spring原理了么?奇怪的是,我这个竟然可以运行。灰常郁闷。
啊。。
<property name="noticeDAO" ref="TNoticeDAO"></property>
</bean>
中的TNoticeDAO这个DAO的名字对不对,还有你的实现类NoticeBizImpl是否有名字为noticeDAO的私有变量,并且名字要正确。否则就get不到。