基于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清空。
让自己变得更优秀才可以有更多资源
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?