Spring核心组件
SpringCore
Core组件一个重要组成部分就是定义了资源的访问方式。Core组件把所有资源都抽象成一个接口,这样,对于资源使用者来说,不需要考虑文件的类型。对于资源提供者来说,也不需要考虑如何将资源包装起来交给别人用(Core组件内所有的资源都可以通过InputStream来获取)。另外,Core组件内资源的加载都是由ResourceLoader接口完成的,只要实现这个接口就可以加载所有的资源。
SpringContext
该组件的作用就是给Spring提供一个运行时的环境,用以保存各个对象的状态。
Bean
Bean组件在Spring的org.springframework.beans包下,主要完成了Bean的创建、Bean的定义以及Bean的解析三件事。
SpringBean的创建是典型的工厂模式,其工厂的继承层次关系如图所示:
在工厂模式中,在工厂的实现类中生成 Bean 返回给调用客户端,这就要求客户端提供生成自己所需类实例的工厂类,增加客户负担。
SpringMVC执行流程
1、用户发送请求到前端控制器DispatcherServlet;
2、前端控制器DispatcherServlet接收到请求后,DispatcherServlet会使用HandlerMapping来处理,HandlerMapping会查找到进行处理请求的Handler对象;
3、HandlerMapping找到对应的Handler之后,并不是返回一个Handler原始对象,而是一个Handler执行链(HandlerExecutionChain),在这个执行链中包括了拦截器和处理请求的Handler。HandlerMapping返回一个执行链给DispatcherServlet;
4、DispatcherServlet接收到执行链后,会调用Handler适配器去执行Handler;
5、HandlerAdapter执行完成Handler之后会得到一个ModelAndView,并返回给DispatcherServlet;
6、DispatcherServlet接收到HandlerAdapter返回的ModelAndView之后,会根据其中的视图名调用ViewResovler;
7、ViewResolver根据逻辑视图名解析成一个真正的View视图,并返回给DispatcherServlet;
8、DispatcherServlet接收到视图之后,会根据上面的ModelAndView中的model来进行视图中数据的填充,也就是所谓的视图渲染;
9、将渲染完成之后,DispatcherServlet就可以将结果返回给用户了。
SpringBoot核心注解和自动配置原理
@SpringBootConfiguration组合了@Configuration注解,实现配置文件的功能;@EnableAutoConfiguration打开自动配置的功能,也可以关闭某个自动配置的功能,如关闭数据源自动配置功能;@ComponentScan进行Spring组件扫描。
注解@EnableAutoConfiguration,@Configuration,@ConditionalOnClass就是自动配置的核心,@EnableAutoConfiguration给容器导入META-INF/spring.factories里定义的自动配置类。