近看了一下spring ioc的源码 觉得很有意思 ,于是就想自己也实现一个ioc试试的想法 ,接着就有了现在这个自己动手实现IOC和MVC。
spring3 ioc的实现是基于Java annotation 或者xml配置的 ,现在大多数的人越来越喜欢annotation了,但是网上关于annotation和xml配置的说法是众说纷纭,各有各的好坏,本人比较喜欢annotation ,用起来简单方便,所以咱们要实现ioc是基于java annotation
1、 spring是怎么把你的注释的class实例化的:
① spring 会扫描你配置的package以及package子包下的所有class是否标注有annotation(如:@Repository,@Service,@Controller)
② spring 然后他会把扫描的这些类得信息赋值给一个类似于BeanDefinition.java中,这个类包括了String id (唯一标识Bean),String className(如:com.ajun,User),List roperties(存入注入时候的属性信息)同时在这个扫描到这个class内的属性标有@Resource的field,这个field就是进行注入的,赋值给Property.java,Property.java包含了String name(属性名字),String ref(要注入到哪个class的id)
③ 此时spring会有List 里面装你需要进行实例化的class的信息的BeanDefinition.java,接着就是循环这个list,利用java反射机制实例化class,实例的过程会把所有实例化完的bean放在一个Map,供以后进行使用。
2、下面介绍一下整个Project的结构
com.ajunframework.beans主要是包含对bean的操作的类
com.ajunframework.beans.annotation主要是定义一些java annotation 用于扫描进行实例化bean
com.ajunframework.beans.applicationContext用于管理bean上下文
com.ajunframework.beans.factory工厂包 提供一些操作实例化之后bean的操作
com.ajunframework.beans.definition 用于定义bean的一些信息的class
com.ajunframework.beans.scan 用于扫面package以及package子包下的所有class
com.ajunframework.beans.utils一些相关操作辅助class
这一节主要是介绍整个系列的背景和整个project的结构以及spring ioc原理
下一节开始介绍具体的实现过程