目录
一 . Factory Method 工厂方法
二. IoC/DI
三.工厂方法模式和IoC/DI有什么关系
四.Spring 的源码分析
一 . Factory Method 工厂方法
定义一个用于创建对象的接口,让子例觉得实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。
Define an interface for creating an object,
but let subclasses decide which class to instantiate. Factory Method lets a
class defer instantiation to subclasses.
Frequency of use: high
The classes and/or objects participating in this pattern are:
Product (Page)
defines the
interface of objects the factory method creates
ConcreteProduct (SkillsPage, EducationPage, ExperiencePage)
implements the
Product interface
Creator (Document)
declares the
factory method, which returns an object of type Product. Creator may also
define a default implementation of the factory method that returns a default
ConcreteProduct object.
may call the
factory method to create a Product object.
ConcreteCreator (Report, Resume)
overrides the
factory method to return an instance of a ConcreteProduct.
要想理解上面两个概念,就必须搞清楚如下的问题:
参与者都有谁?
依赖:谁依赖于谁?为什么需要依赖?
注入:谁注入于谁?到底注入什么?
控制反转:谁控制谁?控制什么?为何叫反转(有反转就应该有正转了)?
依赖注入和控制反转是同一概念吗?
下面就来简要的回答一下上述问题,把这些问题搞明白了,IoC/DI也就明白了。
(1)参与者都有谁:
一般有三方参与者,一个是某个对象;一个是IoC/DI的容器;另一个是某个对象的外部资源。
又要名词解释一下,某个对象指的就是任意的、普通的Java对象; IoC/DI的容器简单点说就是指用来实现IoC/DI功能的一个框架程序;对象的外部资源指的就是对象需要的,但是是从对象外部获取的,都统称资源,比如:对象需要的其它对象、或者是对象需要的文件资源等等。
(2)谁依赖于谁:
当然是某个对象依赖于IoC/DI的容器
(3)为什么需要依赖:
对象需要IoC/DI的容器来提供对象需要的外部资源
(4)谁注入于谁:
很明显是IoC/DI的容器 注入 某个对象
(5)到底注入什么:
就是注入某个对象所需要的外部资源
(6)谁控制谁:
当然是IoC/DI的容器来控制对象了
(7)控制什么:
主要是控制对象实例的创建
(8)为何叫反转:
反转是相对于正向而言的,那么什么算是正向的呢?考虑一下常规情况下的应用程序,如果要在A里面使用C,你会怎么做呢?当然是直接去创建C的对象,也就是说,是在A类中主动去获取所需要的外部资源C,这种情况被称为正向的。那么什么是反向呢?就是A类不再主动去获取C,而是被动等待,等待IoC/DI的容器获取一个C的实例,然后反向的注入到A类中。
(9)依赖注入和控制反转是同一概念吗?
根据上面的讲述,应该能看出来,依赖注入和控制反转是对同一件事情的不同描述,从某个方面讲,就是它们描述的角度不同。依赖注入是从应用程序的角度在描述,可以把依赖注入描述完整点:应用程序依赖容器创建并注入它所需要的外部资源;而控制反转是从容器的角度在描述,描述完整点:容器控制应用程序,由容器反向的向应用程序注入应用程序所需要的外部资源。
(10)小结一下:
其实IoC/DI对编程带来的最大改变不是从代码上,而是从思想上,发生了“主从换位”的变化。应用程序原本是老大,要获取什么资源都是主动出击,但是在IoC/DI思想中,应用程序就变成被动的了,被动的等待IoC/DI容器来创建并注入它所需要的资源了。
这么小小的一个改变其实是编程思想的一个大进步,这样就有效的分离了对象和它所需要的外部资源,使得它们松散耦合,有利于功能复用,更重要的是使得程序的整个体系结构变得非常灵活。
三.工厂方法模式和IoC/DI有什么关系
从某个角度讲,它们的思想很类似。
上面讲了,有了IoC/DI过后,应用程序就不再主动了,而是被动等待由容器来注入资源,那么在编写代码的时候,一旦要用到外部资源,就会开一个窗口,让容器能注入进来,也就是提供给容器使用的注入的途径,当然这不是我们的重点,就不去细细讲了,用setter注入来示例一下,看看使用IoC/DI的代码是什么样子
四.Spring 的源码分析
待续…..
个人笔记,较多源于网络
http://www.dofactory.com/Patterns/PatternFactory.aspx
http://www.iteye.com/topic/692793
分享到:
相关推荐
本文阐述一个IOC/DI框架的设计与实现。本框架是一个可复用的设计构件,是一种多层的J2EE应用程序框架,其核心就是提供 一种新的机制管理业务对象及其依赖关东,可以有效的降低软件开发问题的复杂度。
dijon, 在Javascript中,由Robotlegs和Swiftsuspenders激发的,ioc/di框架 DIJON框架 Dijon是用于Javascript的IOC和DI微框架。 最初它是一个Robotlegs端口,但却偏离了一些完全不同的地方。 它仍然受到Robotlegs的...
(1)Product类(商品类):含id(商品编号)、proName(商品名称)、price(价格),并为所有属性生成get和set方法。 (2)Market类(超市类):含marketName(超市名称)、productArr(仓库,List集合) (3)...
什么是Ioc和DI
jBeanBox是一个微形但功能较齐全的IOC/AOP工具,用于Java6或以上环境。 jBeanBox项目的定位:需要一个功能较全的IOC/AOP工具,但是又不想引入臃肿的Spring。 其它IOC/AOP工具的问题: Spring: 源码臃肿,Java方式...
实现一个IoC/DI容器参考网址:https://blog.csdn.net/weixin_43042683/article/details/106456415 实现一个RPC框架参考网址: https://blog.csdn.net/weixin_43042683/article/details/106459282
Spring中IOC/AOP的说明和例子
IoC/DI(InverseofControl/DependencyInjection,控制反转/依赖注入)模式是一种企业级架构模式,通过将应用程序控制权反转交移给框架,并以构造器注入、属性设置器注入等方式将类实体注入到特定应用层中,最终实现...
什么是spring,spring核心,spring优点,spring体系结构, 入门案例,DI基础,核心API,文档内附代码
IOC(DI)与AOP概念的理解
主要介绍了Spring IOC和DI实现原理及实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
Ioc, DI demo, IocPerformance-master
使用spring框架,工厂模式的IoC应用,非常简单的小例子。
BriskIoCBriskIoC is a fast, light-weight, brisk IoC/DI container to work in nodejs. It references the decorator of Spring framework and changes some usage in javascript.BriskIoC是一个快速、轻量级、...
ASP.NET Core应用中,针对第三方DI框架的整合可以通过在定义Startup类型的ConfigureServices方法返回一个ServiceProvider来实现。但是并不是那么容易的,下面通过实例给大家分享一下
spring-beans.jar 这个jar文件是所有应用都要用到的,它包含访问配置文件、创建和管理bean及进行Inversion of Control / Dependency Injection(IoC/DI)操作相关的所有类。如果应用只需基本的IoC/DI支持,引入...
手写的IOC,DI,只用到了javax.servlet.*下的包,没有其他工具包。本人手写,绝对可用,jdk1.8环境
从零到精通Spring3的开发知识;IoC/DI的思想、IoC/DI的运行流程、IoC/DI的开发指导、AOP的思想、AOP的运行流程、AOP应用的设计、Spring对JDBC和Hibernate的支持、Spring的事务、SSH的集成应用
3.spring-beans:基础jar包,它包含访问配置文件、创建和管理bean 以及进行Inversion of Control / Dependency Injection(IoC/DI)操作相关的所有类。如果应用只需基本的IoC/DI 支持,引入spring-core.jar 及spring...