揣摩实现一个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 ...
随机推荐
- Android学习笔记(九) 视图的应用布局效果
最近少了写博客,可能最近忙吧,工作上忙,因为工作原因也忙于学习,也没记录什么了,也没有按照之前的计划去学习了.现在就记录一下最近学到的. 要做Android应用,界面设计少不了,可惜之前一直在用Win ...
- Apache+PHP 配置随笔
准备安装包 1:安装VC++ 2012(vcredist_x64,我这边服务器为64位) 2:Apache安装包,php安装包 安装后配置工作 1:安装Apache服务,配置环境变量 httpd -k ...
- 介绍开源的.net通信框架NetworkComms框架 源码分析(七)ProtobufSerializer
原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架 作者是英国人 以前是收费的 目前作者已经开源 许可是 ...
- asp.net动态生成按钮Button控件
1.动态生成button控件及响应服务端和客户端事件 void BindButtons(){ foreach (var item in items) { Button Btn = new Button ...
- Access数据导入SQLServer2008R2
环境:office Access 2010+SQLServer2008R2+Windows Server 2008R2 方式:Transact-SQL 方法: 1. 在SQL SERVER里查询acc ...
- 基于.Net Framework 4.0 Web API开发(4):ASP.NET Web APIs 基于令牌TOKEN验证的实现
概述: ASP.NET Web API 的好用使用过的都知道,没有复杂的配置文件,一个简单的ApiController加上需要的Action就能工作.但是在使用API的时候总会遇到跨域请求的问题, ...
- java servlet手机app访问接口(四)推送
一. 服务端DEMO下载及运行. 登录友盟后,浏览器直接输入下面这个URL,直接进入文档开发和DEMO下载页面:http://dev.umeng.com/push/ios/integration(下面 ...
- pm2 配置
---恢复内容开始--- 1. ecosystem.json { "apps": [ { "name": "name", // 项目名 &q ...
- ASP.NET MVC下使用文件上传
这里我通过使用uploadify组件来实现异步无刷新多文件上传功能. 1.首先下载组件包uploadify,我这里使用的版本是3.1 2.下载后解压,将组件包拷贝到MVC项目中 3. 根目录下添加新 ...
- Servlet获取request的变量方法.
1.String localAddr = request.getLocalAddr(); // 获取本地IP,即服务器 IP 2.setAttribute(String name,Object ...