在Action中需要使用到Service类,这时候需要注入,那么整合的方案有2种:
1.(不常用)让Action依赖Spring工厂,通过Spring工厂拿出业务逻辑类,顺便注入DAO,这时Service是不需要set( )方法的
action运行之后,会加载配置文件applicationContext.xml,然后去配置文件里面植入相应的依赖类,这种方法的缺点正在于此,每次有个请求来的时候,到达action就会加载一次配置文件,就会创建多个配置文件的实例,破坏了单例。
2:整合方案: 我们应该在项目启动的时候就加载Spring配置文件,并且放到application内置对象(全局的,大家都可以用)中
*
* 在创建Action到Spring配置文件中获取,那么只要Action能创建 Action-->Service-->Dao就会依赖注入
此方案需要三步走:
1: 配置监听器,加载Spring的配置文件
*
* 2: 默认情况下,Action是Struts创建,我们需要交给Spring管理并且要让Spring创建
*
* 加载 struts2-spring-plugin-2.1.6.jar
*
* 注意: 此包加载之后,创建Action就会到Spring中去获取,所以在非整合的情况,不要加载此包,否则会报错
*
* 3: Action class属性:整合的时候修改为 Spring 配置中的id的名字
<!-- 配置Spring文件路径 -->因为ServletContextListener监听器默认是到web—INF目录下去找的,不配置会找不到applicationCotext,报错
<context-param>
<!-- 用来加载Spring配置文件路径 -->
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/。。。自己的配置文件在哪里/applicationContext.xml</param-value>
</context-param>
<listener>
<!-- ContextLoaderListener实现ServletContextListener,而ServletContextListener在项目启动的时候就运行
它是用来专门加载Spring配置文件监听器
-->
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
原文:http://www.cnblogs.com/2027437606qq/p/5014399.html