这几天学了下spring和hibernate整合,现在的思路是这个样子:service和dao层的类都规到了spring的IOC容器里面管理。在配置文件中一般有<bean id="datasource">,<bean id="sessionFactory">, <bean id="userDao">
上面配置没贴全,但大概意思大家应该明白,原理就是datasource注入sessionFactory,然后将sessionFactory注入userDao。userDao一般继承一个HibernateDaoSupport,这个基类中有sessionFactory的注入方法。sessionFactory的实现类一般是spring提供的org.springframework.orm.hibernate3.LocalSessionFactoryBean,    我的问题就是HibernateDaoSupport中接收sessionFactory注入的方法参数类型是org.hibernate.SessionFactory,而我们通常配置的LocalSessionFactoryBean却和org.hibernate.SessionFactory没有任何继承关系。这到底是为什么呢?没有继承关系,却能够注入?由于能力问题,想了一上午没弄明白,看源代码也发现缘由。请大家指点。谢谢了

解决方案 »

  1.   

    LocalSessionFactoryBean继承的AbstractSessionFactoryBean类实现了org.springframework.beans.factory.FactoryBean接口, spring在装配的时候, 如果发现实现了org.springframework.beans.factory.FactoryBean接口, 就会使用FactoryBean#getObject() 方法
    返回的对象装配,AbstractSessionFactoryBean中的getObject()返回的是org.hibernate.SessionFactory
      

  2.   

    这个你看下spring的注入机制就知道了,基本上只要在pojo里面有set和get方法就可以。或者说实现了接口的类也可以,你想要了解他的原理的话你看源码吧