日期:2014-05-19  浏览次数:20685 次

问个SSH加载顺序的问题
如题 :s2sh框架

请问加载顺序如何

不要粘贴网上的回复,我已经搜索了很多

看的有点乱了

我目前了解到的

web.xml  读到 cont-param和listener

先contparam读取classpath下的 spring文件

然后加载listener,把 action 引入 bo 的 借口拿到?
这块有点不太清晰

然后又自动注入相关,我不大清楚顺序


问题:应用启动时 是先 spring 呢还是先struts

此外里面具体的不用详细说,我就想知道 各部分是怎么衔接的

还是,注入的时候 

加入我在分了好多层 ,对用好多个 spring 配置文件 

一层调用一层 

请问 当我 出发一个请求时,是如何 在这 几个 app开头的xml文件里面找出对应项(注入)的呢

还是其他机制?这点老迷糊了 

要是每次都查找,效率也太低了

所以肯定有什么我不理解的

望清晰的人作答,让 小弟一看就明白。

不太清楚的,望不要乱回答。


不胜感激
------最佳解决方案--------------------
嗯……应该是Spring解析xml的时候的检查问题。同一个文件内不允许相同的beanid,这是spring解析xml的检查机制。
两个文件具有相同的id的bean,那么spring会注入两次。是对相同对象连续注入两次,所以没有什么错误发生。

但是,这么弄很容易造成混淆。开发者很容易自己把自己给弄晕,改了其中一个而忘了改另一个。
假如两个文件具有相同id的bean,但注入内容有不同,那么最终内容是后面注入的那个,等于就是覆盖了。

你可以实验下,两个bean,使用相同的id和class,对同样的对象注入不同的内容。

这里涉及到spring载入配置文件顺序问题。
spring载入配置文件,如果你是指明了spring配置,按逗号隔开,那么按照你指定的先后顺序进行载入。
但假如是使用了通配符,那么是按照字母顺序载入的。
------其他解决方案--------------------
最简单的方法 自己配置一个SSH框架 然后写一套方法看看怎么走的 ,spring就是一个容器,关键还是看web中加载struts.xml的过程,在到action的过程中有一些拦截器,他们负责调用action的set或者get方法给对应的属性注射值,还有当初我最迷糊的,用了hibernate之后,跟数据库就没有任何关系了,铭记!
------其他解决方案--------------------
靠……这问题我还专门做过笔记的……算你运气好,免费分享给你……
当初可是费了我一番力气分析的
------其他解决方案--------------------
先是Struts1.x 与Spring的结合配置使用流程:
该方案通过"自动注入"的方式获取对象,也即"依赖注入"方式。
较为常用,但特定情况下使用不了。如两个JVM,一个在长沙运行,一个在深圳运行,就不能同时实现注入,(1)"Spring和Struts的支持环境构建"
复制Struts、Spring相关包,并提供Struts、Spring的配置
提供国际化支持,提供缺省的国际化资源文件。
(2)"配置web.xml"
配置<context-param>,其中内容为Spring的配置文件applicationContext.xml。注意<param-name>的内容,必须为"contextConfigLocation";
配置<listener>,使用Spring提供的ContextLoaderListener。
配置范例:

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext-*.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

解析:
当Web应用启动时,将执行以下操作:
①由Tomcat创建一个ServletContext,并自动载入<context-param>中的属性;
②ContextLoaderListener检测到ServletContext的创建,运行Spring的相关程序;
③Spring根据<context-param>中contextConfigLocation的指向,加载对应applicationContext.xml;
④Spring根据applicationContext.xml的内容创建一个BeanFactory实例,并放入ServletContext中。
简而言之,该配置的作用是:当Web应用启动时,Spring将自动创建一个BeanFactory实例,并放入ServletContext中。
(3)"配置Struts"
struts-config.xml文件中,注意其<action>标签的type属性,设置为Spring的代理Action类。由此真正的action创建交给Spring完成。
若不使用Spring,type设置为com.project.LoginAction等自定义类;使用Spring,type设置为"org.springframework.web.struts.DelegatingActionProxy"。
但"仍需构建具体Action",并编写Action的具体方法。该Action"在Spring的配置中引用",详见"(4)配置Spring"。
相当于将Struts配置转移到了Spring配置中,此处即Struts与Spring框架结合的关键结合点。
配置范例:

<struts-config>
<form-beans>
<form-bean name="loginForm" type="com.project.usermgr.web.forms.LoginActionForm"/>
</form-beans>
<action-mappings>
<action path="/login"
type="org.springframework.web.struts.DelegatingActionProxy"
name="loginForm"
scope="request"
>
<forward