我在写一个用hibernate实现文件上传的代码,网上查到很多用spring+hibernate实现的,里面涉及到几个spring的包。但是我对spring一窍不通,对文章中提到的“注入”一词实在费解,我是想把那几个包拿来导入到我的工程里,然后代码自己写,不实现spring的配置文件,请问这该如何实现,望高手不吝赐教!!!小弟先谢过了。如以下描述:LobHandler必须注入到Hibernate会话工厂sessionFactory中,因为sessionFactory负责产生与数据库交互的Session。LobHandler的配置如代码:1. <beans> 2. …3. <bean id="nativeJdbcExtractor"4. class="org.springframework.jdbc.support.nativejdbc.CommonsDbcpNativeJdbcExtractor"5. lazy-init="true"/>6. <bean id="lobHandler"7. class="org.springframework.jdbc.support.lob.OracleLobHandler" lazy-init="true">8. <property name="nativeJdbcExtractor">9. <ref local="nativeJdbcExtractor"/>10. </property>11. </bean>12. …13. </beans>注入的配置文件代码如下:1. <beans> 2. …3. <bean id="sessionFactory"4. class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">5. <property name="dataSource" ref="dataSource"/>6. <!-- 为处理Blob类型字段的句柄声明 //-->7. <property name="lobHandler" ref="lobHandler"/>8. …9. </bean>10. …11. </beans>
如第7所示,通过sessionFactory的lobHandler属性进行注入。
我现在已经手动编写了seesionFactory
LobHandler的包我也导入工程了
然后这个“注入”我想自己写代码,该如何实现!

解决方案 »

  1.   

    spring的核心就在于依赖注入思想,如果不理解,就不要用spring整合hibernate的方式解决。
    如果你想知道什么是依赖注入,可以看http://topic.csdn.net/u/20080102/19/4146990f-c573-4969-b004-704c8d0c445d.html中我的回复。
      

  2.   

    我只是想利用spring的某个包,但不想依赖它的配置文件,而是手动实现他的注入,不理解所以才来问,人总有开始接触的时候,总有个理解的过程。
      

  3.   

    我之所以这么说,是因为你要想手动完成它的机制,比理解依赖注入要困难的多。
    可能你的意思是不使用“注入”直接进行实例化,这样也是可行的,直接new就行了,但是如果你真是想手动实现它“注入”的机制,还是比较困难的,请慎重。
      

  4.   

     因为我看配置文件的时候 有种知其然不知其所以然的感觉,如果是看代码的话,感觉更直观点。所以我没依赖spring来管理hibernate,而是自己编写了一个seesionFactory,并且对数据库的操作也可以了。不过现在要用到spring中的一个包,但网上查到的全是注入的,我又不明白配置文件中的配置转换为代码是个什么样子,所以想请教下大家。 
    请教一下,new了一个实例之后,不可以不调用的,如果看配置文件,能看出这该实例在其中是怎么被调用的吗?
      

  5.   

    你如果想了解它实现的机制,可以找它的源代码,太复杂,我也说不清楚,我只把它解析xml的过程大概跟你说一下。
    如果用spring进行依赖注入的方式获得实例,
    首先,利用
    Resource res=new ClassPathResource("applicationContext.xml");
    对你xml文件进行定位。
    然后用
    BeanFactory bf=new XmlBeanFactory(res);
    对xml解析。
    当你需要获得实例时,调用方法
    类名 实例=(类名)bf.getBean("类名");
    获得这个类的一个实例。
    具体的完成机制设计到一大堆java反射编程的内容,自己实现确实比较费尽。
      

  6.   

    new了实例之后也可不调用,最多是警告,不会是错误的。
      

  7.   

    虽然不太明白,还是谢谢了!!!
    主要我不明白LobHandler在LocalSessionFactoryBean里面是如何被调用的比如单看下面这段配置信息
    <bean id="userDAO" class="org.tie.dao.UserDAO">
    <property name="sessionFactory">
    <ref bean="sessionFactory" />
    </property>
    </bean>
    应该可以理解为 userDAO里调用了sessionFactory
    而我知道userDAO里对sessionFactory的调用实际上是调用了它的getSession()方法来获得一个session实例,这样我就能模范配置文件写个sesssionFactory然后在userDAO里显示的new一个实例,来实现功能差不多的代码 
      

  8.   

    这个好理解,比如<bean id="userDAO" class="org.tie.dao.UserDAO"> 
      <property name="sessionFactory">  
        <ref bean="sessionFactory" /> 
      </property> 
    </bean> 看了这段代码,就相当于知道,有个类是package org.tie.dao;
    import org.springframework.orm.hibernate3.LocalSessionFactoryBean;
    public class UserDAO{
       private LocalSessionFactoryBean sessionFactory;
       ……
       public void getSessionFactory(LocalSessionFactoryBean sesstionFactory){
         this.sessionFactory=sessionFactory;
      }
    }而这里的这个注入,就是说,你原来得自己写
    sessionFactory=new LocalSessionFactoryBean();
    现在在构造UserDAO的实例之后,自动通过getter把这个实例给了UserDAO的这个实例。
      

  9.   

    恩 我大概明白注入的意思了 不需要自己new 而是通过配置文件在运行时动态的加载
    谢谢了!