揣摩实现一个ioc容器需要做的事情
思路:
ioc框架的核心就是管理bean的生命周期,bean的生命周期包括:创建,使用,销毁。
创建
容器在创建一个bean的实例之前必须要解决以下问题:
第一个问题: 创建bean的信息如何提供给你容器?
容器通过xml文件或者json格式预定义一些元素指定创建一个类需要的信息,
如:包点类名,属性名以及对应的属性值,以及该实例是否为单例等等。
然后根据这些信息通过java反射技术就可以创建这个类实例。
也可以用过特定的注解,扫描特定注解获取到特定注解所在的类信息就可以利用
java反射技术创建这个类的实例。
第二个问题:哪些bean需要容器去创建? 这些bean必须的条件??
容器默认凡是配置在xml或者添加特定注解的(@IocBean)中的类都是需要容器管理的bean。
这些Bean必须提供一个无参的构造,必须公共的。
第三个问题:何时开始创建这些被容器管理的bean?
容器默认是在项目启动的时候读取配置文件或者扫描注解进行初始化这些bean。
也有可以指定在获取这个bean的时候再进行初始化。
第四个问题:容器是如何存放这些bean的??
这么多的bean肯定要有一个key与之对应,使用map存放是挺好的方式。
第五个问题:都可以为框架使用者提供哪些方式的注入??
一个比较灵活的ioc容器应该为Bean提供更多中方式进行注入。
比如:构造函数注入,属性注入
第六个问题:注入的值都可以支持哪些类型??
布尔,数字,内部对象,引用,等
使用
容器要做的事情就是在使用一个bean之前帮你实例化好这对象,容器可以选择在项目启动的时候进行初始化好这个bean,也可以
在web容器启动的时候依据自己的注解和配置文件将这些要实例化bean的信息暂时保存起来,等到你真正使用的时候再去初始化。
获取bean对象实例的方式:
1.通过容器自动帮你注入。
2.通过自己手动获取容器中bean对象。
销毁
ico容器创建的这么多的bean什么时候销毁呢?
当容器关闭的时候里面的所有bean都会被销毁。
我们选择使用注解和xml的时候需要明白一点,使用注解在运行时关系是固定的不可更改,但是使用xml配置文件却可以
针对某一个接口的服务改变实现类。
揣摩实现一个ioc容器需要做的事情的更多相关文章
- 从0开始搭建一个IoC容器(C#版)
网址:https://blog.csdn.net/wangyahua1234/article/details/100619695 目录 1. IoC简介 2. Tiny版IoC的功能 3. Tiny版 ...
- 手写一个IOC容器
链接:https://pan.baidu.com/s/1MhKJYamBY1ejjjhz3BKoWQ 提取码:e8on 明白什么是IOC容器: IOC(Inversion of Control,控制反 ...
- 手撸一个IOC容器
IoC 什么是IoC? IoC是Inversion of Control(控制反转)的简称,注意它是一个技术思想.描述的是对象创建.管理的事情. 传统开发方式:比如类A依赖类B,往往会在类A里面new ...
- TypeC一个微软开发的超简单.NET依赖注入/IoC容器
控制反转(IoC,Inversion of Control)是由Martin Fowler总结出来的一种设计模式,用来减少代码间的耦合.一般而言,控制反转分为依赖注入(Dependency Injec ...
- 自定义模拟一个Spring IOC容器
一.模拟一个IOC容器: 介绍:现在,我们准备使用一个java project来模拟一个spring的IOC容器创建对象的方法,也就是不使用spring的jar自动帮助我们创建对象,而是通过自己手动书 ...
- 曹工说Tomcat4:利用 Digester 手撸一个轻量的 Spring IOC容器
一.前言 一共8个类,撸一个IOC容器.当然,我们是很轻量级的,但能够满足基本需求.想想典型的 Spring 项目,是不是就是各种Service/DAO/Controller,大家互相注入,就组装成了 ...
- 通过中看不中用的代码分析Ioc容器,依赖注入....
/** * 通过生产拥有超能力的超人实例 来理解IOC容器 */ //超能力模组接口 interface SuperModuleInterface{ public function activate( ...
- 基于nutz框架理解Ioc容器
同样我们从问题入手去验证以及去理解Ioc容器都做了哪些事情: 1.nutz是有几种方式获取需要容器管理bean的信息? 第一种是使用json格式的文件进行配置,如: 第二种:使用注解@IocBean ...
- IoC 之 2.2 IoC 容器基本原理(贰)
2.2.1 IoC容器的概念 IoC容器就是具有依赖注入功能的容器,IoC容器负责实例化.定位.配置应用程序中的对象及建立这些对象间的依赖.应用程序无需直接在代码中new相关的对象,应用程序由IoC ...
随机推荐
- 这几天做完简易酒店管理系统,对Sql Server执行计划的浅显了解。
我是一名大三的小学生,今天开始我的第一篇博客,最近随便做了一个简易的酒店管理系统,对sql执行计划有了初步的了解. 查看上面语句的预估执行计划,在工具栏中有这个按钮 聚集索引扫描被称为Index Sc ...
- iOS阶段学习第15天笔记(NSArray与NSMutableArray 数组)
iOS学习(OC语言)知识点整理 一.OC中的数组 1)数组:也是一个对象,数组中存放的是对象的地址,可以存放任意类型对象的地址,只能是对象不能是具体的数值,数组是有序的, 可以存放重复的元 ...
- Java工程图标前面的红色叹号
有时Java工程图标前面会出现一个红色的叹号,这是因为工程引入的jar包不存在(或者被删除.移动)造成的. 右键点击工程,选择Build Path->Configure Build Path,弹 ...
- 【Java每日一题】20161031
package Oct2016; import java.util.SortedSet; import java.util.TreeSet; public class Ques1031 { publi ...
- Hack语言的类型系统
基础类型 PHP中主要的基础类型可以在Hack中进行显式类型标注.包含: bool int float string array resource <?hh namespace Hack\Use ...
- 后缀名为properties,config和xml的文件内容读取
1.先建立文件(后缀名为properties和config) 2.读取类建立 public class Read{ public static Properties properties = new ...
- 添加项目到远程服务器(git)
搞开发经常会用到把代码提交到远程服务器,之前也是懵懂的.今天来整理了一下.具体操作如下: 1.进入到远程服务器 ssh name -- 远程服务器地址 2.进入以后新建一个空的仓库 git init ...
- [mysql] 查看mysql执行时间
mysql的 profiling不是默认打开的 查看profiling是否找开 mysql> show variables like "%pro%"; +---------- ...
- 跨平台日志清理工具 Log-Cutter v1.0.3 正式发布
Log-Cutter 是JessMA开源组织开发的一个简单实用的日志切割清理工具.对于服务器的日常维护来说,日志清理是非常重要的事情,如果残留日志过多则严重浪费磁盘空间同时影响服务的性能.如果用手工方 ...
- 《Continuous Integration》读书笔记
Trigger a Build whenever a change occurs. it can help us reduce assumptions on a projecvt by rebuild ...