ioc

spring IOC 核心流程分析

馋奶兔 提交于 2020-02-29 03:18:22
1、IOC 核心接口 IOC 中最主要的有两个接口,一个是BeanFactory ,一个是ApplicationContext 。 BeanFactory 作为IOC容器的顶层接口,提供了对容器bean 的一些基础操作如getBean(xxx),containsBean(xxx),isSingleton(String name),getType(String name)。 ApplicationContext 继承自BeanFactory接口,除了包含BeanFactory的所有功能之外,在国际化支持、资源访问(如URL和文件)、事件传播等方面进行了良好的支持。 2、IOC 核心流程 AbstractApplicationContext.refresh() @Override public void refresh() throws BeansException, IllegalStateException { synchronized (this.startupShutdownMonitor) { // Prepare this context for refreshing. prepareRefresh(); /* * 1、刷新子类BeanFactory * 2、创建Beanfactory实例 * beanFactory = new

阅读spring源码

試著忘記壹切 提交于 2020-02-29 03:13:22
读Spring源码之前,你要先清楚,为什么你要用Spring... Spring最基本的功能是做为管理bean的容器,所以我以为应该先从org.springframework.context包了解咯,包括org.springframework.web.context; 然后是org.springframework.beans org.springframework.aop 你看那个从core开始看就可以了 从ApplicationContext Spring中文手册是必须的~~ 1.阅读源码的入口在哪里? 2.入门前必备知识了解:IOC和AOP 一、我们从哪里开始 1.准备工作:在官网上下载了Spring源代码之后,导入Eclipse,以方便查询。 2.打开我们使用Spring的项目工程,找到Web.xml这个网站系统配置文件,在其中找到Spring的初始化信息: [html] view plain copy < listener > < listener-class > org.springframework.web.context.ContextLoaderListener </ listener-class > </ listener > 由配置信息可知,我们开始的入口就这里ContextLoaderListener这个监听器。 在源代码中我们找到了这个类,它的定义是:

spring学习——Ioc基础三(Ioc配置使用)

纵饮孤独 提交于 2020-02-28 22:51:13
一、XML配置的结构 一般配置文件结构如下: <beans> <import resource=”resource1.xml”/> <bean id=”bean1”class=””></bean> <bean id=”bean2”class=””></bean> <bean name=”bean2”class=””></bean> <alias alias="bean3" name="bean2"/> <import resource=”resource2.xml”/> </beans> 1、<bean>标签主要用来进行Bean定义; 2、alias用于定义Bean别名的; 3、import用于导入其他配置文件的Bean定义,这是为了加载多个配置文件,当然也可以把这些配置文件构造为一个数组(new String[] {“config1.xml”, config2.xml})传给ApplicationContext实现进行加载多个配置文件,那一个更适合由用户决定;这两种方式都是通过调用Bean Definition Reader 读取Bean定义,内部实现没有任何区别。<import>标签可以放在<beans>下的任何位置,没有顺序关系。 二、Bean的配置 Spring IoC容器目的就是管理Bean,这些Bean将根据配置文件中的Bean定义进行创建

依赖注入模式中,为什么用对象而不是用数组传递?

独自空忆成欢 提交于 2020-02-28 14:37:20
依赖注入(Dependence Injection, DI) 依赖注入是控制反转的一种设计模式。依赖注入的核心是把类所依赖的单元的实例化过程,放到类的外面去实现。依赖注入的实现离不开反射。 依赖注入(Dependence Injection, DI) 所谓的依赖注入,指将依赖的对象通过参数的形式一次性传入,使用时不需要显式 new 了,比如把A类所依赖的B类、C类等以属性或者构造函数等方式注入A类而不是直接在A类中实例化。 只要不是由内部生产(比如初始化、构造函数中通过工厂方法、自行手动 new 的),而是由外部以参数或其他形式注入的,都属于依赖注入(DI) 。 依赖注入需要利用反射实现,比如: Copy class A { protected $b; public function __constrcut(B $b) { $this->b = $b; } } // 通过控制反转容器生成 A 的实例时,会通过反射发现 A 的构造函数需要一个 B 类的实例 // 于是自动向 A 类的构造函数注入 B 类的实例 $a = IoC::make(A::class); 依赖注入的实质就是把一个类 不可更换的部分 和 可更换的部分 分离开来,通过 注入 的方式来使用,从而达到解耦的目的。 比如有一个 Mysql 数据库连接类如下: Copy class Mysql { private

构造基于配置文件的IOC容器

隐身守侯 提交于 2020-02-28 13:50:30
一.背景 本文是建立在你已经对面向接口编程很熟悉的基础上的。即你已不是处于面向类编程的阶段。若对面向接口编程不是很熟悉,请参考我的博文: http://my.oschina.net/RabbitXiao/blogcatalog=3509386&temp=1468383616081 先看简单工厂再看抽象工厂。对接口设计先有一个大致的了解。 那知道一些设计模式的朋友应该知道,一旦面向接口编程,势必就得拿到已实现的接口。为此一些列的设计模式诞生了,比如简单工厂模式,抽象工厂模式等这就是本文要讨论的内容,通过ioc控制反转,转移接口控制权,降低耦合。 二.剖析直接类与类相互依赖的弊端 前提:我们假想一个做菜吃的简单场景。 针对不同的原料得到对应的菜,其具体实现如下: namespace LogicLayer.rabbit { /// <summary> /// 土豆助手类 /// </summary> public class potatoHelper { public void Cook() { Console.WriteLine("您要的土豆已经做好!"); } } } namespace LogicLayer.rabbit { /// <summary> /// 西红柿助手类 /// </summary> class tomatoHelper { public void Cook()

spring拾遗(一)——IOC的应用

陌路散爱 提交于 2020-02-28 03:45:05
前言 spring这个玩意,其实要单纯谈使用的话,其实内容也不少,工作中有些东西用的挺多,但是很不系统。去年也尝试过看spring的源码,但是通常陷入到"我是谁,我在哪儿的,我干嘛要看这玩意"的思考(因为太晕了),想想这玩意还是得学啊,不能因为不懂,不能因为它让我怀疑人生就放弃,还是得从头撸。后来思考发现自己太过依赖百度,忽略了官网这玩意,这次就从官网出发。总结一些更多的操作,让spring的学习更加系统。这篇博客并不是一个官网的翻译,整理的内容会非常零散,毕竟只是补充我们平常使用spring框架忽略的东西。 什么是IOC,IOC和DI有啥区别 这又是一个灵魂拷问,在面试中遇到过很多次,不同的人回答方式不同。个人觉得这个东西一句话就能解决,DI其实就是IOC的一种实现,IOC只是一种设计理念。除了DI的方式来实现IOC,DL的方式也是IOC的一种实现。(之前有一种说法,DI是IOC的另一种表达方式,感觉不太全面) 控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称 DI ),还有一种方式叫“依赖查找”(Dependency Lookup ) 为什么要有IOC 自己new它不香吗?不好意思,自己new,真的香不起来

String之IOC——构造方法赋值方式总结

只愿长相守 提交于 2020-02-28 01:35:26
1.参数为基本数据类型或String 使用constructor-arg标签属性: name属性:通过参数名找到参数列表中对应参数 index属性:通过参数在参数列表中的索引找到参数列表中对应参数,index从0开始 type属性:通过参数数据类型找到参数列表中对应参数 value属性:设置参数列表参数对应的值,用于设定基本数据类型和String类型的数据 application.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www

Spring中ioc的实现原理

五迷三道 提交于 2020-02-27 06:45:09
学习过Spring框架的人一定都会听过Spring的IoC(控制反转) 、DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC 、DI这两个概念是模糊不清的,是很难理解的,今天和大家分享网上的一些技术大牛们对Spring框架的IOC的理解以及谈谈我对Spring Ioc的理解。 一、分享Iteye的开涛对Ioc的精彩讲解   首先要分享的是Iteye的开涛这位技术牛人对Spring框架的IOC的理解,写得非常通俗易懂,以下内容全部来自原文,原文地址:http://jinnianshilongnian.iteye.com/blog/1413846 1.1、IoC是什么    Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。 在Java开发中, Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。 如何理解好Ioc呢?理解好Ioc的关键是要明确“谁控制谁,控制什么,为何是反转(有反转就应该有正转了),哪些方面反转了”,那我们来深入分析一下:   ● 谁控制谁,控制什么: 传统Java SE程序设计,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对象;而IoC是有专门一个容器来创建这些对象,即由Ioc容器来控制对 象的创建; 谁控制谁?当然是IoC 容器控制了对象;控制什么

Laravel的IOC容器和依赖注入

元气小坏坏 提交于 2020-02-26 09:21:04
之前我们梳理了 Laravel控制反转和依赖注入 的概念,这篇我们结合Laravel框架,看看它是如何实现的。 1, 入口文件 <?php /** * Laravel - A PHP Framework For Web Artisans * * @package Laravel * @author Taylor Otwell <taylor@laravel.com> */ define('LARAVEL_START', microtime(true)); 1.1 注册自动加载器,也就是 Laravel的自动加载机制,可参看 Laravel Composer自动加载机制 /* |-------------------------------------------------------------------------- | Register The Auto Loader |-------------------------------------------------------------------------- | | Composer provides a convenient, automatically generated class loader for | our application. We just need to utilize it! We'll

依赖注入Dependency Injection,DI

一世执手 提交于 2020-02-26 03:14:06
依赖注入Dependency Injection,DI @AutoWired,他注入的机制最基本的一条是:根据类型(by type),根据类型从IOC容器中获取bean。 使用AutoWired进行依赖注入的时候,如果注入的接口有多于一个的实现类,可一根据变量名称,从IOC容器中获取对象。 Animal接口 两个实现类:dog、cat @AutoWired Animal animal; // 报错 @AutoWired Animal dog; // 正常 通过name从IOC容器中获取bean 来源: CSDN 作者: 414丶小哥 链接: https://blog.csdn.net/u010838785/article/details/104455653