发表于: 2022-05-02 18:19:48

1 652


今天学习了spring IOC的知识点:


(1) Http请求:客户端请求提交到DispatcherServlet。


(2) 寻找处理器:由DispatcherServlet控制器查询一个或多个HandlerMapping,找到处理请求的Controller。


(3) 调用处理器:DispatcherServlet将请求提交到Controller。


(4)(5)调用业务处理和返回结果:Controller调用业务逻辑处理后,返回ModelAndView。


(6)(7)处理视图映射并返回模型: DispatcherServlet查询一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图。


(8) Http响应:视图负责将结果显示到客户端。


IOC容器介绍

Spring 通过一个配置文件描述 Bean 及 Bean 之间的依赖关系,利用 Java 语言的反射功能实例化 Bean 并建立 Bean 之间的依赖关系。


 Spring 的 IoC 容器在完成这些底层工作的基础上,还提供了 Bean 实例缓存、生命周期管理、 Bean 实例代理、事件发布、资源装载等高级服务。


BeanFactory 是 Spring 框架的基础设施,面向 Spring 本身;


ApplicationContext 面向使用 Spring 框架的开发者,几乎所有的应用场合我们都直接使用 ApplicationContext 而非底层的 BeanFactory。


XmlBeanFactory 通过 Resource 装载 Spring 配置信息并启动 IoC 容器,


然后就可以通过 BeanFactory#getBean(beanName)方法从 IoC 容器中获取 Bean 了。


通过 BeanFactory 启动IoC 容器时,并不会初始化配置文件中定义的 Bean,初始化动作发生在第一个调用时。


对于单实例( singleton)的 Bean 来说,

BeanFactory会缓存 Bean 实例,所以第二次使用 getBean() 获取 Bean 时将直接从 IoC 容器的缓存中获取 Bean 实例。


Spring 在 DefaultSingletonBeanRegistry 类中提供了一个用于缓存单实例 Bean 的缓存器,

它是一个用HashMap 实现的缓存器,单实例的 Bean 以 beanName 为键保存在这个HashMap 中。


值得一提的是,在初始化 BeanFactory 时,必须为其提供一种日志框架,比如使用Log4J,

即在类路径下提供 Log4J 配置文件,这样启动 Spring 容器才不会报错。


IoC 底层通过工厂模式、Java 的反射机制、XML 解析等技术,将代码的耦合度降低到最低限度,其主要步骤如下。


在配置文件(例如 Bean.xml)中,对各个对象以及它们之间的依赖关系进行配置;


我们可以把 IoC 容器当做一个工厂,这个工厂的产品就是 Spring Bean;


容器启动时会加载并解析这些配置文件,得到对象的基本信息以及它们之间的依赖关系;


IoC 利用 Java 的反射机制,根据类名生成相应的对象(即 Spring Bean),并根据依赖关系将这个对象注入到依赖它的对象中。


遇到的问题:没有


明天计划:将spring再次搭建,将自己之前不理解的问题解决。



返回列表 返回列表
评论

    分享到