8 -- 深入使用Spring -- 7...4 使用自动装配

本文介绍如何通过自动装配策略整合Struts2与Spring框架,简化配置并自动注入业务逻辑组件到Action实例中。虽然能减少配置工作量,但也提高了Action与业务逻辑组件间的耦合度。

      8.7.4 使用自动装配

        在自动装配策略下,Action还是由Spring插件创建,Spring 插件在创建Action实例时,利用Spring的自动装配策略,将对应的业务逻辑组件注入Action实例中。这种整合策略的配置文件简单,但控制器和业务逻辑组件耦合又提升到了代码层次,耦合较高。

        如果不指定自动装配,则系统默认使用按byName自动装配。前面的整合策略并没有指定任何自动装配策略。

        所谓自动装配,即让Spring自动管理Bean与Bean之间的依赖关系,无须使用ref显示指定依赖Bean。Spring容器会自动检查XML配置文件的内容,为主调Bean注入依赖Bean。自动装配可以减少配置文件的工作量,但会降低依赖关系的透明性和清晰性。

        通过使用自动装配,可以让Spring插件自动将业务逻辑组件注入Struts 2 的Action实例中。

        通过设置struts.objectFactory.spring.autoWire常量可以改变Spring插件的自动装配策略,该常量可以接受如下几个值:

          ⊙ name : 使用byName自动装配。

          ⊙ type : 使用byType自动装配。

          ⊙ auto : Spring插件会自动检测需要使用那种自动装配方式。

          ⊙ constructor : 与type类似,区别是constructor使用构造器来构造注入所需的参数,而不是使用设值注入方式。

        如果使用按byName来完成自动装配,则无须设置任何Struts 2 常量。

        在这种整合策略下,还采用传统的方式来配置Struts 2 的Action,配置Action时一样指定具体的实现类。

        因为使用了自动装配,Spring插件创建Action实例时,是根据配置Action的class 属性指定实现类来创建Action实例的。

        XML : Struts 2

<?xml version="1.0" encoding="UTF-8" ?>
<!-- 指定Struts 2 配置文件的DTD信息 -->
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">

<!-- Struts 2 配置文件的根元素 -->
<struts>
    <!-- 配置了一系列常量 -->
    <constant name="struts.i18n.encoding" value="UTF-8"/>
    <constant name="struts.devMode" value="true"/>
    <constant name="struts.enable.DynamicMethodInvocation" value="false"/>

    <package name="edu.pri.lime.account.act" extends="struts-default">
    <!-- 定义处理用户请求的Action,该Action的class属性不是实际处理类,而是Spring容器中的Bean实例的ID -->
        <action name="login" class="edu.pri.lime.account.act.LoginAction">
            <!-- 为两个逻辑视图配置页面 -->
            <result name="error">/WEB-INF/content/error.jsp</result>
            <result name="success">/WEB-INF/content/welcome.jsp</result>
        </action>
        <!-- 让用户直接访问该应用时列出所有的视图页面 -->
        <action name="*">
            <result>/WEB-INF/content/{1}.jsp</result>
        </action>
    </package>
</struts>

        Class : LoginAction

package edu.pri.lime.account.act;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;

import edu.pri.lime.account.service.MyService;

public class LoginAction extends ActionSupport{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    
//    封装用户请求参数的两个成员变量
    private String username;
    private String password;
    
//    系统所用的业务逻辑组件
    private MyService ms;
//    设置注入业务逻辑组件所必需的setter方法
    public void setMs(MyService ms){
        this.ms = ms;
    }
//    处理用户请求的execute方法
    public String execute() throws Exception{
//        调用业务逻辑组件的validLogin()方法
//        验证用户名和密码
        if(ms.validLogin(getUsername(),getPassword()) > 0){
            addActionMessage("Congratulation!,Integer Succeed !");
            return Action.SUCCESS;
        }
        return Action.ERROR;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    

}

        XML : applicationContext

<?xml version="1.0" encoding="UTF-8"?>
<!-- Spring 配置文件的根元素,使用Spring-beans-4.0.xsd语义约束 -->
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-4.0.xsd">

    <!-- 部署一个业务逻辑组件 -->
    <bean id="ms" class="edu.pri.lime.account.service.impl.MyServiceImpl"/>

</beans>

        Action所需的业务逻辑组件的id必须为ms,因此配置业务逻辑组件时,必须指定其id属性为ms。

        在这种整合策略下,Spring插件负责为Action自动装配业务逻辑组件,从而可以简化配置文件的配置。

        这种方式也存在如下两个缺点:

          ⊙ Action与业务逻辑组件的耦合降低到代码层次,必须在配置文件中配置与Action所需控制器同名的业务逻辑组件。这不利于高层次解耦。

          ⊙ Action 接收Spring容器的自动装配,代码的可读性较差。

啦啦啦

啦啦啦

啦啦啦

Delphi 12.3 作为一款面向 Windows 平台的集成开发环境,由 Embarcadero Technologies 负责其持续演进。该环境以 Object Pascal 语言为核心,并依托 Visual Component Library(VCL)框架,广泛应用于各类桌面软件、数据库系统及企业级解决方案的开发。在此生态中,Excel4Delphi 作为一个重要的社区开源项目,致力于搭建 Delphi 与 Microsoft Excel 之间的高效桥梁,使开发者能够在自研程序中直接调用 Excel 的文档处理、工作表管理、单元格操作及宏执行等功能。 该项目以库文件与组件包的形式提供,开发者将其集成至 Delphi 工程后,即可通过封装良好的接口实现对 Excel 的编程控制。具体功能涵盖创建与编辑工作簿、格式化单元格、批量导入导出数据,乃至执行内置公式与宏指令等高级操作。这一机制显著降低了在财务分析、报表自动生成、数据整理等场景中实现 Excel 功能集成的技术门槛,使开发者无需深入掌握 COM 编程或 Excel 底层 API 即可完成复杂任务。 使用 Excel4Delphi 需具备基础的 Delphi 编程知识,并对 Excel 对象模型有一定理解。实践中需注意不同 Excel 版本间的兼容性,并严格遵循项目文档进行环境配置与依赖部署。此外,操作过程中应遵循文件访问的最佳实践,例如确保目标文件未被独占锁定,并实施完整的异常处理机制,以防数据损毁或程序意外中断。 该项目的持续维护依赖于 Delphi 开发者社区的集体贡献,通过定期更新以适配新版开发环境与 Office 套件,并修复已发现的问题。对于需要深度融合 Excel 功能的 Delphi 应用而言,Excel4Delphi 提供了经过充分测试的可靠代码基础,使开发团队能更专注于业务逻辑与用户体验的优化,从而提升整体开发效率与软件质量。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值