揣摩实现一个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与C#中数据类型的对应关系
对应关系表 SQL Server2000 http://hovertree.com/menu/sqlserver/ C# CodeSmith 数据类型 取值范围 数据类型 取值范围 空值代替值 数据类 ...
- 11.21 if条件语句 年月日执行判断
<script language="javascript"> var nian=prompt("输入一个年份","") if(n ...
- Gym 100703G---Game of numbers(DP)
题目链接 http://vjudge.net/contest/132391#problem/G Description standard input/outputStatements — It' s ...
- [javaSE] 反射-Class类的使用
JAVA-Reflect 专题 ①Class类的使用 ②方法的反射 ③成员变量的反射 ④构造函数的反射 ⑤java类的加载机制 Ⅰ在面向对象的世界里,万事万物皆为对象 类是对象,类是java.lang ...
- [PHP] 使用Socket提供Http服务
我的SimpleLoader里面的一块 https://github.com/taoshihan1991/simpleloader <?php namespace Server; class S ...
- [moka同学笔记]Yii2 自定义class、自定义全局函数(摘录)
1.在app\components下新建MyComponent.PHP namespace app\components; use Yii; use yii\base\Component; use y ...
- ahjesus code simith 存储过程模板
<%------------------------------------------------------------------------------------------ * Au ...
- angular学习的一些小笔记(中)之ng-init
ng-init是给angular执行给定的表达式,初始化变量的值 <!DOCTYPE html> <html> <head> <meta charset='U ...
- jQuery Wheel 环形菜单插件5种效果演示
很酷的菜单-jQuery Wheel 环形菜单插件5种效果演示在线预览 下载地址 实例代码 <div class="container"> <!-- Top Na ...
- 安卓 9.png 图片的制作
安卓的九宫格png图片可以自定义拉伸的区域,所以可以很方便的适应不同宽度高度的设备. 9.png格式是很纯正的png格式,与普通的png不同的是9.png格式的图片最外围有一圈1像素的透明区域,或者说 ...