1.面向对象回顾和案例

   面向对象程序设计:1 2 3 4

   案例分析:

        需求分析:

     报表功能:
     报表服务类,检索数据,并生成图标
     报表生成器类,生成不同格式的报表文件,例如PDF格式、Html格式等

 

     实现一:以面向对象的方式实现Demo
     实现二:分离接口和实现
     优化目标:消除ReportService到ReportGenerator实现类之间的依赖关系

     实现三:

      采用容器:
      增加容器类:Container类
      所有组件由Container类管理

      分析:

         ReportService与ReportGenerator的具体实现解耦了

        选择不同的Generator不需要修改Service
      缺点:
          Container对所管理的所有组件产生了依赖
          ReportService对Container依赖,因为其封装有查找逻辑,所以在重用之前还要修改
     目标:
         去掉ReportService对Container依赖

     实现四:    

     使用服务定位器:
     服务定位器:ServiceLocator类
     封装查找逻辑
     对外公开查找组件(Generator)的方法     

     优点:
       应用服务定位器将查找逻辑从组件里分离出来
      降低组件在查找方面的复杂性
      增加组件的重用性
      这是用于查找资源的通用设计模式,并不局限于查找组件
         JavaEE中的应用,如:JNDI(Java命名和目录接口)
       局限
          组件需要知道如何查找资源

 2.IIoC和DI

   概念:  

   IoC(Inversion of Control,控制反转):
   设计原则,解耦组件之间的依赖关系

   DI( DI(Dependency Injection ,依赖注入):
   具体的设计模式,体现了IoC的设计原则
   因为DI是IoC最典型的实现,所以术语IoC与DI经常被混用

   应用IoC:

   

    应用IoC:
     好的获取资源的解决方案
     由容器主动将资源推送到它所管理的组件里,组件要有接受资源的方式
     查找的被动形式

    实现五:

    

    不需要服务定位器
    组件(ReportService)增加接受资源的方法(setter)
    由容器将组件(ReportGenerator)注入到另一个组件(ReportService)

    优点
     完全面向接口

 不同类型的依赖注入:

 

主要有三种类型的DI
接口注入(Type1 IoC)
setter注入(Type2 IoC)
构造器注入(Type3 IoC)
流行程度最广的:setter注入
有可能忘记注入,会抛出空指针
代码安全有可能存在问题,依赖会被修改
构造器注入
可避免setter注入的一些缺点
没有含义明确的方法名,对参数位置与数量有要求

3.Spring框架简介

4.Spring框架实现IoC

Spring提供了IoC容器
Beans均由Spring IoC容器
来管理和组装

Spring实例编码步骤:

导入Spring相关Jar文件
配置元数据
编码实现功能,组件间用容器进行注入

Spring示例:

Bean是一个由Spring IoC容器进行实例化、装配和管理的对象
Beans以及他们之间的依赖关系是通过容器使用配置元数据反应出来
配置元数据:
基于Xml的配置
基于注解的配置
基于Java的配置

版权声明:本文为Firesun原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/Firesun/p/9881768.html