Spring 核心组件

41 阅读2分钟

前言

spring 框架的核心包括:IOC、AOP以及辅助工具SpringEL等 首先要明确一个概念,Spring的IOC容器是ApplicationContext。 常用的ApplicationContext如下:

  • ClassPathXmlApplicationContext:从classPath路径中加载XML配置的上下文
  • FileSystemXmlApplicationContext:从文件系统中加载XML配置的上下文
  • XmlWebApplicationContext:web开发中从XML中加载web上下文,区别于上面两个之处在于,次上下文是基于ServletContext的。
  • AnnotationConfigWebApplicationContext:从注解类中加载web上下文。

这些上下文中的实例在Spring中被叫做Bean。

  1. instantiate -- 实例化(构造器实例化、静态工厂方法实例化、实例工厂方法实例化、注解@Bean)【音死 tan兴 哎特】
  2. Populate properties 注入属性【破皮 内特 po 皮 特死 】
  3. BeanNameAware.setBeanName()
  4. BeanFactiryAware.setBeanFactory()
  5. BeanPostProcessor.postProcessBeanforeInitialization();bean初始化前添加自定义行为
  6. @postConstruct
  7. InitialzingBean.afterPropertiesSet()
  8. Custom init-method [xml 配置初始化方法]
  9. BeanPostProcessor.postProcessAfterInitialization();bean初始化前添加自定义行为
  • Bean 准备就绪
  • 容器关闭
  1. @preDestroy
  2. DisposableBean.destroy()
  3. Custom destroy-method

双亲上下文机制

很多情况下,配置一个或多个DispatcherServlet。每个dispatchServlet都有一个自己的WebApplicationContext上下文

无XML的配置方式

利用注解+代码配置,此方式是SpringBoot的基础 @Configuration @Bean @Profile @ComponentScan @EnableWebMVC @Import @PropertySource

SpringBoot运行原理

  1. @EnableAutoConfiguration 标注看这个注解的java类会以java代码的形式提供一些列的Bean定义和实例。结合@AnnotationConfigApplicationContext 和自定扫描功能,就可以构建一个基于Spring容器的java应用。
    • @EnableAutoConfiguration 注解时,会使用spring框架的SpringFactoryesLoader去扫描classpath下的所有META-INF/spring.factories文件内容。
      
    • 入口类,main方法,SpringApplication.run(..)
      
    • 组成模块有很多如:spring-boot-starter-web、spring-boot-starter-logging都是使用以上原理来实现自动配置的。
      

表达式引擎SpEL #{}

  • 可以通过Bean的id引用Bean
  • 可以调用某个对象的方法或者访问它的属性
  • 支持数学、关系、逻辑操作
  • 正则表达式匹配
  • 支持集合操作