spring 抽象类注入问题
我的basedao类是抽象父类底下有很多实现类调用了父类的方法在用spring注入的时候报错.错误就不贴了大概的意思是不能实例化抽象类(我注入的是继承了的子类)我就把ab...
我的basedao类是抽象父类 底下有很多实现类调用了父类的方法 在用spring注入的时候报错.错误就不贴了 大概的意思是不能实例化抽象类(我注入的是继承了的子类) 我就把abstract关键字给删了 里面的方法和字段还用的protected. 有没有什么影响???
展开
5个回答
展开全部
说错了,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)的,不知道我这样说楼主明白否
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)的,不知道我这样说楼主明白否
展开全部
关系应该是这样的,你的实现类继承basedao抽像类并实现其方法.
在SPRING 注入的时候,要注入basedao抽像类的接口并不是basedao抽像类本身
你是不是没有建立basedao抽像类的接口,直接注入到basedao抽像类本身了.
在SPRING 注入的时候,要注入basedao抽像类的接口并不是basedao抽像类本身
你是不是没有建立basedao抽像类的接口,直接注入到basedao抽像类本身了.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在引用父类的地方,要对应写上实现类。不然无法根据父类引用来确定是哪个子类的对象。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
代码如下:
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()
}
}
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()
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
没问题啊,是不是你那边写错了
推荐用接口来注入,用父类应该也没问题的
推荐用接口来注入,用父类应该也没问题的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询