博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
8 -- 深入使用Spring -- 7...4 使用自动装配
阅读量:6586 次
发布时间:2019-06-24

本文共 2777 字,大约阅读时间需要 9 分钟。

      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

/WEB-INF/content/error.jsp
/WEB-INF/content/welcome.jsp
/WEB-INF/content/{1}.jsp

        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

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

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

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

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

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

啦啦啦

啦啦啦

啦啦啦

转载地址:http://hdhno.baihongyu.com/

你可能感兴趣的文章
骚年,还在为歌荒发愁吗?python教你爬取网易云热门歌单
查看>>
如何实现百万TPS?详解JMQ4的存储设计
查看>>
Play! Framework 系列(一):初探 play 框架
查看>>
Shiro【授权、整合Spirng、Shiro过滤器】
查看>>
解剖 RxJava 之过滤操作符
查看>>
滴滴 Web 移动端组件库 cube-ui 开源
查看>>
一篇文章了解JsBridge之IOS篇
查看>>
0712 - 坚守,加强老本
查看>>
MarkDown语法
查看>>
这么说吧,NIO很简单,其实就是个牛逼IO
查看>>
七、【应用的主要框架】
查看>>
使用Python快速获取公众号文章定制电子书(二)
查看>>
weak和assign的区别
查看>>
iOS下JS与OC互相调用(七)--Cordova 基础
查看>>
两列自适应布局方案整理
查看>>
测试本地node包
查看>>
Three.js 关于立方体贴图产生边缘锯齿问题
查看>>
自己动手,在macOS High Sierra中编译一个可debug的JDK
查看>>
用掘金-Markdown 编辑器写文章
查看>>
一文搞懂前端对象的深拷贝与浅拷贝
查看>>