struts2的配置文件<action name="findSpwd" class="jkdjAction" method="findSpwd">
然后去找
<bean id="jkdjAction" class="com.northsoft.kyz.struts2.cwxt.JkdjAction"
请问是哪里定义的struts去令一个文件里找bean的那?,它怎么就去找另一个xml文件里的bean去了那?

解决方案 »

  1.   

    当Struts2与spring结合时,要在类路径下加入struts2-spring-plugin-2.1.8.1.jar,解压会发现有一个配置文件,其中一部分内容如下:<package name="spring-default">
            <interceptors>
                <interceptor name="autowiring" class="com.opensymphony.xwork2.spring.interceptor.ActionAutowiringInterceptor"/>
                <interceptor name="sessionAutowiring" class="org.apache.struts2.spring.interceptor.SessionContextAutowiringInterceptor"/>
            </interceptors>
        </package>    原理就是spring扩充了struts2的拦截器,通过拦截器和spring的DI实现给struts2的Action注入的,有兴趣可以看看上面两个spring实现的拦截器。
      

  2.   

    在struts2-spring-plugin-XXXX.jar中的struts-plugin.xml中有如下定义:
    <bean type="com.opensymphony.xwork2.ObjectFactory" name="spring" class="org.apache.struts2.spring.StrutsSpringObjectFactory" />
    <constant name="struts.objectFactory" value="spring" />objectFactory是用来指定在struts中创建对象的类,上面指定使用StrutsSpringObjectFactory来创建对象。
    StrutsSpringObjectFactory在创建对象时,会根据acion的class属性来决定使用Spring中的bean,还是使用原始的方法创建Action
      

  3.   

    在ApplicationContext.xml中加入一个Bean
    你的struts.xml中在<include file ="struts-default.xml"/>下面加上<constant name="struts.objectFactory" value="org.apache.struts2.spring.StrutsSpringObjectFactory" /> 这句,你的action交给Spring管理的话必须加上这句