揣摩实现一个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配置文件却可以
针对某一个接口的服务改变实现类。
让自己变得更优秀才可以有更多资源