基于nutz框架理解Ioc容器
同样我们从问题入手去验证以及去理解Ioc容器都做了哪些事情:
1.nutz是有几种方式获取需要容器管理bean的信息?
第一种是使用json格式的文件进行配置,如:

第二种:使用注解@IocBean

第三种:使用xml
略.......
2. 如何那么多的方式如何进行选择呢?
我们自己实际的生产环境的用法是:
一般的依赖关系都是固定的,在运行的时候基本不变的,我们采用的是注解,
将可能变动的关系写到配置文件里。
比如:我们将项目中各个分层之间的service采用的是注解,


将数据库相关配置放到配置文件中,

3.ioc容器是如何确定哪些Bean是容器需要管理的:
问几个问题:
a.它是怎么知道哪些文件中配置是需要被容器管理的bean,以及需要扫描哪些类上的@IocBean注解呢??
nutz提供了一个注解(@IocBy)专门用于在主模块类上指定扫描哪些文件以及注解。

有上图可以知道:
json方式配置的bean的加载器去webconfig/下,以及Linux下的两个路径下扫描。
注解方式配置的bean加载器将扫描com.uxuexi开头包下的类。
b.它是如何去扫描除本项目之外的jar包(一般都是自己创建的,不会扫描第三方)呢?
可以在项目启动的时候,nutz的ioc容器加载完毕之前手动将要容器管理的bean扫描到容器中。
4. 何时开始创建这些被容器管理的bean?
nutz在服务启动的时候将所有被@IocBean注解的类以及配置在json格式文件中的类信息加载到一个map中。

就是上面圈住的那个map,其中key默认是这个类名。
而这个IocObject这个类主要就是记住这个类的信息:

就是说在服务器启动的时候nutz只是扫描注解和文件将需要被容器管理的bean的信息集中存储到一个地方中,并没有真正的创建这些bean的实例。
5.容器什么时候会创建真正bean的实例??
分两种种情况:
1.第一种当服务启动的时候就需要获取容器中的bean实例,可以手动获取容器。

2.第二种是当我们的第一次http请求映射到的那个Module类,nutz会帮你去从ioc容器中取。


6.都提供哪些Ioc的注入类型??
构造函数注入:

属性注入:

7.ioc容器在什么时候销毁???
nutz通过将Filter的destroy方法在web容器停止运行的时候会将ioc容器销毁,

NutzLoading类中的方法:

就是将缓存中存放map清空。
基于nutz框架理解Ioc容器的更多相关文章
- Spring学习(一):理解IoC容器
序言 记得刚毕业那会儿,出来招工作被问到Spring的核心时,都觉得简单的一笔,直接说不就是IoC(控制反转)和DI(依赖注入)么,然后省略一万字对两个名词的解释.最近空来整理了一下Spring中Io ...
- Spring框架 之IOC容器 和AOP详解
主要分析点: 一.Spring开源框架的简介 二.Spring下IOC容器和DI(依赖注入Dependency injection) 三.Spring下面向切面编程(AOP)和事务管理配置 一.S ...
- Spring框架学习[IoC容器高级特性]
1.通过前面4篇文章对Spring IoC容器的源码分析,我们已经基本上了解了Spring IoC容器对Bean定义资源的定位.读入和解析过程,同时也清楚了当用户通过getBean方法向IoC容器获取 ...
- Spring框架及IOC容器
Spring是一个非常活跃的开源框架, 它是一个基于IOC和AOP来构架多层JavaEE系统的框架,它的主要目地是简化企业开发.Spring以一种非侵入式的方式来管理你的代码, Spring提倡”最少 ...
- 【Spring源码解析】—— 结合SpringMVC过程理解IOC容器初始化
关于IOC容器的初始化,结合之前SpringMVC的demo,对其过程进行一个相对详细的梳理,主要分为几个部分: 一.IOC的初始化过程,结合代码和debug过程重点说明 1. 为什么要debug? ...
- 【.NET6+WPF】WPF使用prism框架+Unity IOC容器实现MVVM双向绑定和依赖注入
前言:在C/S架构上,WPF无疑已经是"桌面一霸"了.在.NET生态环境中,很多小伙伴还在使用Winform开发C/S架构的桌面应用.但是WPF也有很多年的历史了,并且基于MVVM ...
- dreamvc框架(一)ioc容器的集成
我的dreamvc框架最终写得差点儿相同了,借鉴了非常多开源框架,SpringMVC.Struts2等,眼下放在github上面.地址请猛戳我 写得差点儿相同了,是要写一个总结,把自己当时的思路记录下 ...
- ASP.NET Web API 框架研究 IoC容器 DependencyResolver
一.概念 1.IoC(Inversion of Control),控制反转 即将依赖对象的创建和维护交给一个外部容器来负责,而不是应用本身.如,在类型A中需要使用类型B的实例,而B的实例的创建不是由A ...
- 脱离spring集成cxf(基于nutz框架)
什么是webService WebService是一种跨编程语言和跨操作系统平台的远程调用技术. 理论资料: http://blog.csdn.net/wooshn/article/details/8 ...
随机推荐
- [c++] Class
也是醉了,一个.h文件就有这么多细节问题: 初始化列表,使用{} 也可以. 类中的引用和const变量,必须立即在初始化列表中提前初始化. 常成员函数,const 放在函数后, 常成员函数即不能改变成 ...
- js 获取当前的时间
第一个小程序,用js获取当前的时间,,比较特殊的是 月是从0开始算的,显示的时候要加1,获取日用getDate(),获取周 getDay(), 直接上代码 <!DOCTYPE html> ...
- spring笔记--通过注解(annotation)配置Bean
Spring能够在classpath下自动扫描,侦测和实例化具有特定注解的组件,这在Spring中成为组件扫描(Component scanning). 特定组件的注解包括: @Component:基 ...
- Cesium原理篇:6 Renderer模块(1: Buffer)
刚刚结束完地球切片的渲染调度后,打算介绍一下目前大家都很关注的3D Tiles方面的内容,但发现要讲3D Tiles,或者充分理解它,需要对DataSource,Primitive要有基础,而这要求对 ...
- 10.Configure One-to-Many(配置一对多关系)【Code-First系列】
现在,我们将学习怎么配置一对多的关系. Visit Entity Relationship section to understand how EF manages one-to-one, one-t ...
- Xamarin.Android之给我们的应用加点过渡效果
零.前言 试想一下,我们的应用正在请求一些数据,假设网络不是很好,要花比较长的时间等待,这个时候界面什么反应也没有, 一动不动,用户可能就会认为应用挂掉了,这么久都没反应的,说不定下一分钟用户就把它卸 ...
- WinForm 代码实现以管理员身份运行
[STAThread] static void Main(string[] Args) { //获得当前登录的Windows用户标示 System.Security.Principal.Windows ...
- tomcat启动时候报错Can't convert argument: null
一.启动报错: 为了避免导入的项目重名,我先修改了前一个项目的名称. 重新启动该项目至tomcat,报错:java.lang.IllegalArgumentException: Cant conver ...
- 【Java每日一题】20161214
package Dec2016; import java.util.ArrayList; import java.util.List; public class Ques1214 { public s ...
- css实现小三角(原理)
效果图如图1所示:(简单示范,有点丑,莫介意) PS:兼容IE,FF , chrome ,360安全浏览器 先讲下原理吧,如图2所示: 这个div的样式如下所示: div{ width: 0px; h ...