zoukankan      html  css  js  c++  java
  • Spring-IOC

         spring的核心是ioc, 即控制反转(依赖注入)
    ioc:
    我们拿数据存储为例:
    1. 实现数据存储的一般思路:定义一个Database类进行数据库的操作,定义一个business业务逻辑类,调用database类及方法。
    实现如下:
    public class Database{
         //向数据库中存储数据
         public void saveDB(){};
    }
    public class Business{
         private Database db = new Database;
         //从数据库中获取数据
         public void saveData(){
         ..
         db.saveDB();
    }
     
    

      

    2. 这样做,每次业务需求变动将导致程序大量修改,是不好的设计方案。
     
    3. 利用ioc的解决思路是:首先编写一个存储数据的接口,然后每个具体负责存储数据的类都实现这个接口。而在业务逻辑类business中,则针对数据的接口编程,并不与存储数据的类建立任何联系。这样,存储方式的变化就不会要修改业务逻辑类了。
     
     
     

    set方式注入的代码实现步骤如下:
          首先编写涌来存储数据的接口SaveData,该接口中定义了saveData()涌来负责存储数据,每一个具体负责存储数据的类都要实现这个方法,而业务逻辑类只针对接口中的savedata()方法编程。
    public interface SaveData {
          //该方法用来存储数据
         public void saveData();
    }
    

      

         接下来,编写负责具体向数据库存储数据的DataBase类,该类实现了savedata接口。
    public class DataBase implement SaveData{
         //该方法用来存储数据
         public void saveData (){
                   //具体负责存储数据的代码
                   ..
         }
    }
    

      

         编写business类,不针对实体类。
    public class Business {
         //针对接口savedata定义变量
         private SaveData db;
         public void setSaveData (SaveData db){
              this.db = db;
         }
         ..
         //根据注入的存储类,存储数据
         public void saveData() {
              ..
              db.saveData();
         }
    }
    

      

         测试类:
    public class TestBusiness {
         private Business business = new Business ();
         ..
         //
         public void saveData (){
              ..
              business.setSaveData (new DataBase ());
              business.saveData ();
              ..
         }
    }
    

      

    优点:通过这种方式,business类就可以重用了,不管采用xml,database等方式都可以存储数据。business类都不用改动,只需要实现具体的savedata接口就行了。
    可见ioc的强大之处在于,面向接口编程,使得业务逻辑代码实现了重用,从而实现了如果不是业务逻辑发生变化,就不需要修改业务逻辑的相关代码。
     
     

    接口注入:
    接口注入指在接口中定义要注入的信息,并通过接口完成注入。改动步骤如下:
         编写business接口,各种存储方式的注入将通过这个接口进行。
     
    public interface Business {
         public void DiSaveData (SaveDara db) ;
    }
         负责业务逻辑的类都不许实现这个接口。
    public class BusinessImpl implement Business {
         private SaveData db;
         public void DiSaveData (SaveData db) {
              this.db = db;
         }
    ..
         //根据注入的存储类,存储数据
         public void saveData (){
         ..
         db.saveData();
         ..
         }
    }
    

      

         测试类。
    public class TestBusiness {
         private Business business = new BusinessImp ();
         ..
         //根据注入的存储类,存储数据
         public void opraDara () {
              ..
              business.DiSaveData (new XMLData ());
              business.SaveData ();
              ..
         }
    }
    

      

     

    构造注入:
    构造注入指在接受注入的类中定义一个构造方法,并在参数中定义需要注入的类。
         为了让business类接受xmldata的注入,需要为它定义一个构造方法,来接受xmldata的注入。
    public class Business {
         private SaveData db;
         public Business (SaveData db) {
              this.db = db;
         }
         ..
         //根据注入的存储类,存储数据
         public void saveData () {
              ..
              db.saveData ();
              ..
         }
    }
    

      

         编写TestBusiness.
    public class TestBusiness {
         private Business business = new Business (new XMLData() );
         ..
         //根据注入的存储类,存储数据
         public void opraData () {
              ..
              business.saveData ();
              ..
         }
    }
    

      

     

    spring提供了调用业务逻辑类的具体方式,开发人员不再需要编写调用具体业务逻辑的类,而是通过配置文档来实现对业务逻辑的调用。具体存储方式发生变化时,只需要改变相应的配置文档即可。
     
     

     
    视图处理
     
    Spring的视图处理方式有两个重要的接口: view resolver和view,view resolver提供了从视图名称到实际视图的映射,view用来处理请求的准备工作,并将该请求提交给某种具体的视图技术。
    spring内置了三种视图方式,internalResourceView, JstlView, RedirectView。其中InternalResourceView用来处理tsp和servlet,jstlview用来处理jstle,redirect view用来处理重新定向视图。
    所有的视图都继承了AbstarctUrlBasedView,只要继承AbstractUrlBasedView就能编写自己的视图。

    解析器(都实现了viewResolver接口):

    InternalResourceViewResolver解析器用来解析Servlet和JSP,
    UrlBasedViewResolver 实现了ViewResolver,将视图名直接解析为对应的URL,不需要显式的映射定义。如果你的视图名和视图资源的名字一致,就可以使用该解析器,而无需进行映射,
    AbstractCachingViewResolver 抽象视图解析器实现对视图的缓存,
    XmlViewResolver 支持XML格式的配置文件,该配置文件必须采用Spring XML Bean Factory相同的DTD,默认配置文件是/WEB-INF/views.xml
     


  • 相关阅读:
    查看占用内存cpu top10
    free 详解
    find
    服务器硬件查看
    firewalld命令使用
    firewalld-zone概念介绍
    Jenkins rpm包安装
    攻击防御案例
    filebeat收集系统登陆日志
    nginx转换json格式
  • 原文地址:https://www.cnblogs.com/mywy/p/5230935.html
Copyright © 2011-2022 走看看