Spring 核心容器 IOC

目录

1. BeanFactory

2. BeanDefinition

3、BeanDefinitionReader

4 . Web IOC 容器初体验

一 、BeanFactory

Spring Bean 的创建是典型的工厂模式,这一系列的 Bean 工厂,也即 IOC 容器为开发者管理对象
间的依赖关系提供了很多便利和基础服务。最基本的 IOC 容器接口 BeanFactory,来看一下它的源码:

public interface BeanFactory {
//对 FactoryBean 的转义定义,因为如果使用 bean 的名字检索 FactoryBean 得到的对象是工厂生成的对象,
//如果需要得到工厂本身,需要转义
String FACTORY_BEAN_PREFIX = "&";
//根据 bean 的名字,获取在 IOC 容器中得到 bean 实例
Object getBean(String name) throws BeansException;
//根据 bean 的名字和 Class 类型来得到 bean 实例,增加了类型安全验证机制。
<T> T getBean(String name, @Nullable Class<T> requiredType) throws BeansException;
Object getBean(String name, Object... args) throws BeansException;
<T> T getBean(Class<T> requiredType) throws BeansException;
<T> T getBean(Class<T> requiredType, Object... args) throws BeansException;
//提供对 bean 的检索,看看是否在 IOC 容器有这个名字的 bean
boolean containsBean(String name);
//根据 bean 名字得到 bean 实例,并同时判断这个 bean 是不是单例
boolean isSingleton(String name) throws NoSuchBeanDefinitionException;
boolean isPrototype(String name) throws NoSuchBeanDefinitionException;
boolean isTypeMatch(String name, ResolvableType typeToMatch) throws
NoSuchBeanDefinitionException;
boolean isTypeMatch(String name, @Nullable Class<?> typeToMatch) throws
NoSuchBeanDefinitionException;
//得到 bean 实例的 Class 类型
@Nullable
Class<?> getType(String name) throws NoSuchBeanDefinitionException;
//得到 bean 的别名,如果根据别名检索,那么其原名也会被检索出来
String[] getAliases(String name);
}

二、BeanDefinition
SpringIOC 容器管理了我们定义的各种 Bean 对象及其相互的关系,Bean 对象在 Spring 实现中是
以 BeanDefinition 来描述的。

三、BeanDefinitionReader

Bean 的解析主要就是对 Spring 配置文件的解析。这个解析过程主要通过
BeanDefintionReader 来完成。

四、Web IOC 容器初体验

IOC 容器初始化以后,最后调用了
DispatcherServlet 的 onRefresh()方法,在 onRefresh()方法中又是直接调用 initStrategies()方法初始
化 SpringMVC 的九大组件:

/**
* This implementation calls {@link #initStrategies}.
*/
@Override
protected void onRefresh(ApplicationContext context) {
initStrategies(context);
}
/**
* Initialize the strategy objects that this servlet uses.
* <p>May be overridden in subclasses in order to initialize further strategy objects.
*/
//初始化策略
protected void initStrategies(ApplicationContext context) {
//多文件上传的组件
initMultipartResolver(context);
//初始化本地语言环境
initLocaleResolver(context);
//初始化模板处理器
initThemeResolver(context);
//handlerMapping
initHandlerMappings(context);
//初始化参数适配器
initHandlerAdapters(context);
//初始化异常拦截器
initHandlerExceptionResolvers(context);
//初始化视图预处理器
initRequestToViewNameTranslator(context);
//初始化视图转换器
initViewResolvers(context);
//
initFlashMapManager(context);
}

原文地址:https://www.cnblogs.com/mobaids/p/12246977.html

时间: 2024-11-03 07:41:45

Spring 核心容器 IOC的相关文章

spring核心容器

容器:用来包装或装载物品的储存器 web服务器与jsp.servlet的关系: 从程序文件存放的位置 程序文件要放到web服务器上 从程序执行的方式  程序的从初始化到消亡都是web服务器管理的 从以上两方面看: web服务器实际是动态网页程序文件的容器 核心容器概述 :控制反转 ,通过容器控制对象的创建以及维护.反转就是将对象的控制权转移给容器处理,目的是获得更好的拓展性和可维护型. public class Boy{ private Dog dog; public Dog getDog(){

一头扎进Spring之---------Spring核心容器

[回顾] 在上篇博客中,我们清楚了Spring的核心IOC,博客的结尾,提出了关于容器的问题.在Spring框架中,容器扮演者重要的角色.容器是什么?Java容器?Spring容器?这几个词,大家都很熟悉,但真正知道么?本篇博客的重点分析Spring中的核心容器.容器和Java容器不做详细介绍. [容器] 容器,从字面角度很容易理解,就是用来贮藏东西的.从计算机的角度,可粗略地分为Web容器和编程容器. Web容器是应用服务器中位于组件和平台之间的接口集合.如WebLogic.Tomcat等.

关于Spring核心容器功能

一句话总结:Spring框架的核心容器能为我们创建对象 spring框架是一种粘合层框架,它是用来整合web层框架和持久层框架的spring可以支持我们各个层级包括数据展示层,业务层和持久层都有对应的解决方案.spring核心容器core container提供了创建对象管理对象的功能core container包括bean,core,context,Expression Languagebean提供了整个框架最基本的部分,包括了IOC控制反转和依赖注入Bean的创建用到了工厂模式:父类是Bea

SPRING源码解析-SPRING 核心-IOC

IoC 和 AOP是Spring的核心, 是Spring系统中其他组件模块和应用开发的基础.透过这两个模块的设计和实现可以了解Spring倡导的对企业应用开发所应秉承的思路: 易用性. POJO开发企业应用, 直接依赖于Java语言,而不是容器和框架. 提升程序的可测试性,提高软件质量. 提供一致性编程模型,面向接口的编程 降低应用的负载和框架的侵入性.IoC和AOP实现. 不作为现有解决方案的替代,而是集成现有. IoC和AOP这两个核心组件,特别是IoC容器,使用户在使用Spring完成PO

spring核心容器两个接口ApplicationContext和BeanFactory

import dao.LoginDao; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.xml.XmlBeanFactory; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlAppl

spring5源码分析系列(二)——spring核心容器体系结构

首先我们来认识下IOC和DI: IOC(Inversion of Control)控制反转:控制反转,就是把原先代码里面需要实现的对象创建.依赖的代码,反转给容器来帮忙实现.所以需要创建一个容器,并且需要一种描述来让容器知道需要创建的对象与对象的关系.这个描述最具体表现就是可配置的文件. DI(Dependency Injection)依赖注入:指对象是被动接受依赖类而不是自己主动去找,即对象不是从容器中查找它依赖的类,而是在容器实例化对象的时候主动将它依赖的类注入给它. 思考以下问题: 对象和

Spring核心之Ioc容器走读笔记

其实说到Spring的核心,无非指的就是Ioc容器和AOP. Spring降低了应用的负载和框架的侵入性,依靠的解决方案正是Ioc和AOP的支持. 学习Spring的Ioc和Aop的设计模式可以帮助我们在自己编写代码的时候如何优雅的设计和实现. 这里就只记录一下自己对Ioc容器设计和实现的走读和思考. 在查看Spring Ioc容器的设计文档和源代码后,发现其实只有2类主要的容器: 一类是实现BeanFactory接口,这类的容器只实现了基本的方法,从名字上就大概能知道是什么功能:一类是实现Ap

Spring核心之IOC&amp;反射

IOC思想:Spring容器来实现相互依赖对象的创建,协调工作.对象只需要关心业务逻辑本身就好了.从这方面来说,对象如何得到他的协作对象的责任被反转了(IOC.DI).控制反转就是获得依赖对象的方式反转了.由Spring来负责控制对象的生命周期和对象间的关系. IOC(控制反转)之中的核心是在系统运行中,动态的向某个对象提供它所需要的其他对象.这一点是通过DI(Dependency Injection,依赖注入)来实现的. 那么DI是如何实现的呢? Java 1.3之后一个重要特征是反射(ref

Spring核心之IOC

IOC是Spring的两大核心之一:IOC的核心就是解耦. 举个例子:有2个班级可以上课,校长指定老师去上课,代码如下 package com.hongcong.test; public class Class1 { public void teach(){ System.out.println("一班在上课"); } } package com.hongcong.test; public class Class2 { public void teach(){ System.out.p