简易实现spring框架的IOC功能
项目初始化流程:
在web.xml中
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>spring.servlet.MyDispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
MyDispatchServlet
在实例化的时候会初始化InitBean
,InitBean
在构造函数中初始化加载application.xml
里面的属性,实例化其中的bean
属性,根据component-scan
属性
可以获得需要扫描的包名,然后扫描对应的包,将其中带有MyComponent
,MyController
,MyRepository
,MyService
注解的类实例化,注入beanContainerMap
中,key为
类名和接口,value为对应的对象,然后扫描这些对象,找到带有MyAutowired
注解的Field
,注入对应的对象。扫描到的Controller,将其添加到handlerMapping
中。
项目处理请求流程:
请求从web.xml
进入,打在MyDispatchServlet
,通过doGet
和doPost
进行跳转,跳转到doDispatch
方法上,从request
中获取参数,注入方法的参数中,执行方法
如果返回MyModelAndView
就先从中取出Attribute,通过request.setAttribute(key,value)
加到request中,然后从MyModelAndView
中取得view,通过request.getRequestDispatcher(resultAddress).forward(request,response)
进行页面跳转,流程结束。