1.Ioc&DI和Spring
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的配置
1.Ioc&DI和Spring的更多相关文章
- IoC, DI,Spring.net
IoC : Inversion of Control , 控制反转,就是创建对象(实例)的权利由开发人员自己控制New转到了由容器来控制.实现了解耦. DI: Dependency Injection ...
- Spring中的IOC\DI\AOP等概念的简单学习
IoC(Inversion of Control,控制反转).这是spring的核心,贯穿始终, 所谓IoC,对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系.Spr ...
- spring 依赖注入(IOC DI)
依赖注入(IOC DI) 依赖注入的两种方式: 1. set注入 Spring要求使用set注入方式的时候,Bean需要提供一个无参数的构造方法.并提供一个属性的setter方法.例如: packag ...
- spring ioc DI 理解
下面是我从网上找来的一些大牛对spring ioc和DI的理解,希望也能让你对Spring ioc和DI的设计思想有更进一步的认识. 一.分享Iteye的开涛对Ioc的精彩讲解 Ioc—Inversi ...
- Spring+IOC(DI)+AOP概念及优缺点
Spring pring是一个轻量级的DI和AOP容器框架. 说它轻量级有一大部分原因是相对与EJB的(虽然本人从没有接触过EJB的应用),重要的是,Spring是非侵入式的,基于spring开发的应 ...
- Spring Ioc DI 原理
IOC(DI):其实这个Spring架构核心的概念没有这么复杂,更不像有些书上描述的那样晦涩.Java程序员都知道:java程序中的每个业务逻辑至少需要两个或以上的对象来协作完成,通常,每个对象在使用 ...
- Spring框架-IOC/DI详细学习
一.IOC/DI概念 参考博客:https://www.cnblogs.com/xdp-gacl/p/4249939.html IOC(inversion of control, 控制反转)是一种设计 ...
- Spring 学习教程(二): IOC/DI+AOP
1. IOC / DI Spring是一个基于IOC和AOP的结构J2EE系统的框架 IOC 反转控制 是Spring的基础,Inversion Of Control 简单说就是创建对象由以前的程序员 ...
- Spring的IOC/DI使用到的技术
一.了解Spring IOC/DI 1:Spring有两大核心技术,控制反转(Inversion of Control, IOC)/依赖注入(Dependency Injection,DI)和面向切面 ...
随机推荐
- 杭电acm 1038题
本题比较简单,但是需要掌握几个小技巧,先上代码 /************************************* 杭电ACM 1038题,已AC ********************* ...
- Zbar和Z*算法对比
博客转载自:https://blog.csdn.net/qishandaxue/article/details/45481387 移植zbar和zxing源码到linux平台,zbar移植的是C源码, ...
- Luogu 4777 【模板】扩展中国剩余定理(EXCRT)
复习模板. 两两合并同余方程 $x\equiv C_{1} \ (Mod\ P_{1})$ $x\equiv C_{2} \ (Mod\ P_{2})$ 把它写成不定方程的形式: $x = C_{1} ...
- redis过期时间设置
方法一: $redis->setex(,'huahua'); 方法二: $redis->set('name','huahua'); $redis->expire('name',3);
- java 使用simpleDateFormat格式化日期 时间.RP
首先了解一下格式化日志的所有表示. 时间日期标识符: yyyy:年 MM:月 dd:日 hh:1~12小时制(1-12) HH:24小时制(0-23) mm:分 ss:秒 S:毫秒 E:星期几 D:一 ...
- 转换流 Properties集合 序列化 工具
今日内容介绍1.转换流2.缓冲流3.Properties集合4.序列化流与反序列化流5.commons-IO============================================== ...
- 监控linux系统的简易脚本
我先把脚本粘贴在这吧,方便大家观看,其中也是借鉴了不少其他大神的东西,这个脚本主要是用来监控服务器.用户.日志,还得创建备份,等等等等.最近学的shell比较多,就用这个来练练手了,比较简单,大家凑合 ...
- matlab处理:批处理图像分块
有一个图像分块的代码,可以直接将一幅图像分为5*5的小块,代码如下: %[FileName,PathName] = uigetfile('*.*','Select the image'); Im=im ...
- java Linkedhashmap源码分析
LinkedHashMap类似于HashMap,但是迭代遍历它时,取得“键值对”的顺序是插入次序,或者是最近最少使用(LRU)的次序.只比HashMap慢一点:而在迭代访问时反而更快,因为它使用链表维 ...
- javascript 常用兼容fire fox的解决办法
常用兼容fire fox的解决办法 一.js不兼容:1.event不兼容,必须通过参数传递过来: function test(event){ //兼容fire fox var event = even ...