spring 抽象类注入问题

我的basedao类是抽象父类底下有很多实现类调用了父类的方法在用spring注入的时候报错.错误就不贴了大概的意思是不能实例化抽象类(我注入的是继承了的子类)我就把ab... 我的basedao类是抽象父类 底下有很多实现类调用了父类的方法 在用spring注入的时候报错.错误就不贴了 大概的意思是不能实例化抽象类(我注入的是继承了的子类) 我就把abstract关键字给删了 里面的方法和字段还用的protected. 有没有什么影响??? 展开
 我来答
虾志色96
推荐于2016-06-11 · TA获得超过423个赞
知道小有建树答主
回答量:690
采纳率:33%
帮助的人:416万
展开全部
说错了,sorry,LocalSessionFacoryBean不是实现sessionFactory的接口,这里想当然的以为sessionFactory是被 LocalSessionFacoryBean实现的,去研读了一下代码发现
LocalSessionFactoryBean继承了AbstractSessionFactoryBean这个抽象类,这个类实现了org.springframework.beans.factory.FactoryBean接口, spring在装配的时候, 如果发现实现了org.springframework.beans.factory.FactoryBean接口, 就会使用FactoryBean#getObject() 方法返回的对象装配,
这个抽象类两个重要的实现org.hibernate.SessionFactory的方法如下:
//在产生类实例后生成sessionFacotry实例,注入到这个类的sessionFactory中
public void afterPropertiesSet() throws Exception {
SessionFactory rawSf = buildSessionFactory();
this.sessionFactory = wrapSessionFactoryIfNecessary(rawSf);
}
//因为实现FactoryBean接口这个类注入的时候通过getObject()注入的是sessionFactory组件,而不是这个LocalSessionFactoryBean的实例
public Object getObject() {
return this.sessionFactory;
}

---------------------------------------------------------------------
楼主去研读一下sessionFactory的代码,其实里面都是空方法,为什么呢,因为他是个接口,你不结合Spring直接用 Hibernate的时候,sessionFactory用的都是SessionFacotryImpl类的实例(因为接口不能实例化)同理,org.springframework.orm.hibernate3.LocalSessionFactoryBean也是这个接口的实现所以可以注入到sessionFactory中
______________________问题分割线______________________________________

<property name="sessionFactory" ref="sessionFactory"/> 这个注入的不是自己的类org.springframework.orm.hibernate3.HibernateTransactionManager,而是自己类用到的组件LocalSessionFacoryBean
比如Class Person{
private String head;
}
注入的是head而不是Person,但是其中Person的head是依赖你外面配置的head(sessionFactory)的,不知道我这样说楼主明白否
百度网友15e1ccd
2011-09-22 · 超过15用户采纳过TA的回答
知道答主
回答量:45
采纳率:0%
帮助的人:44.5万
展开全部
关系应该是这样的,你的实现类继承basedao抽像类并实现其方法.
在SPRING 注入的时候,要注入basedao抽像类的接口并不是basedao抽像类本身
你是不是没有建立basedao抽像类的接口,直接注入到basedao抽像类本身了.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ymiqplgao
2011-09-21 · TA获得超过646个赞
知道小有建树答主
回答量:512
采纳率:0%
帮助的人:394万
展开全部
在引用父类的地方,要对应写上实现类。不然无法根据父类引用来确定是哪个子类的对象。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jiafeimaozcb
2015-12-10 · TA获得超过2万个赞
知道大有可为答主
回答量:9859
采纳率:99%
帮助的人:915万
展开全部
代码如下:
public abstract class B implements A{

private JdbcTemplate jdbctemplate;

public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}

protected void beforeProcess() {
//............
}

protected abstract void process();

protected void afterProcess() {
//............
}

public void execute() throws FrameBizException {
beforeProcess();
process();
afterProcess()
}

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小山山001
2011-09-21 · TA获得超过1159个赞
知道小有建树答主
回答量:1246
采纳率:0%
帮助的人:1269万
展开全部
没问题啊,是不是你那边写错了
推荐用接口来注入,用父类应该也没问题的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式