有一个Java的SSH项目,在win系统上可以正常运行,但到了Ubuntu上就不行。查看了Tomcat的启动信息,说是bean找不到。实际上bean是有的,只是顺序有先后。类似这样的:
<bean id="customerLogic">
     <property name="dao" ref="customerDao"/>
</bean><bean id="customerDao">
</bean>就是前面的bean(customerLogic)引用了后面定义的bean(customerDao)。在Ubuntu上查看Tomcat的日志,提示customerDao这个bean找不到。bean的加载顺序和定义的先后顺序有关?或者和Tomcat有关?抑或者和系统(win/Ununtu)有关?WinXp Tomcat-5.5.20
Ubuntu 11 Tomcat-5.5.33

解决方案 »

  1.   

    补充说明:
    我修改了日志信息里提到的bean,把它放到了前面(在调用之前定义)但是重启后,这个bean不报错了,又有其他的bean说是找不到,我看了一下,同样的问题:在定义之前调用了在bean的配置文件里,先使用,再定义的情况可多,我不想一个一个地去修改。有什么解决方法吗?
      

  2.   

    Bean 的加载就是 定位 -》 载入 -》 注册的基本过程。载入过程中第一步是xml的载入,,第2步才是bean的解析,放到beanDefinition的数据结构中。所以定义顺序跟加载顺序没有必然联系。
      

  3.   

    可以试一下,配置多个applicationContext-*.xml 
      

  4.   

    和你在web.xml中的配置有关系的吧
      

  5.   

    bean的class属性值写的对么 
    注意空格之类的 细心点
      

  6.   

    你分开几个xml文件 几个最先需要初始化的放在同一个xml里面 就可以了
      

  7.   


    本来就用了好多的xml文件。几乎所有的bean文件都是按 action——》logic——》dao的顺序定义的。按你说的,改动有点大
      

  8.   


    和这些没关系。在WinXP下是完全正常的。然后是完全复制到Ununtu上的
      

  9.   

    spring确实存在加载顺序的问题,但是我感觉只要spring的filter配置正确的顺序的,基本上都没问题。由于没有碰到过类似的情况。只提供一个建议:看一下web-xml中spring的filter的顺序。
      

  10.   

    网上查了很多资料,有好些人说:<listener>
    <listener-class>
    org.springframework.web.context.ContextLoaderListener
    </listener-class>
    </listener>
    改成:<servlet>
    <servlet-name>SpringContextServlet</servlet-name>
    <servlet-class>
    org.springframework.web.context.ContextLoaderServlet
    </servlet-class>
    <load-on-startup>1</load-on-startup>
    </servlet>
    但是我们系统系统里用的Listener在Spring自带的那个Listener上有封装了一层,又加了一些初始化的操作。如果直接改成上面说的Spring自带的Servlet,系统启动就报错(WinXP下)我又看了一下ContextLoaderServlet和ContextLoaderListener的区别。说是Listener要servlet2.3版本以上的才可以使用。我在Ununtu上用的Tomcat5.5,看它的文档,都继承servlet2.4了……搞不懂了就
      

  11.   

    这和Tomcat也有关系。
    我换了Tomcat6试了下,异常变了,不是前面提到的异常——Error listenerStart网上查了一下,有人说:把文件commons-logging.jar 从1.1 版本替换到1.0.4版本.  
    但是我试了还是不行
      

  12.   

    晕了。终于知道问题在哪了。原来我读取配置文件时,用的绝对路径。当然在Linux上就找不到D盘了。额的个神呐!!!
      

  13.   

    kan dao zui hou, gei gui le