前言
spring 框架的核心包括:IOC、AOP以及辅助工具SpringEL等 首先要明确一个概念,Spring的IOC容器是ApplicationContext。 常用的ApplicationContext如下:
- ClassPathXmlApplicationContext:从classPath路径中加载XML配置的上下文
- FileSystemXmlApplicationContext:从文件系统中加载XML配置的上下文
- XmlWebApplicationContext:web开发中从XML中加载web上下文,区别于上面两个之处在于,次上下文是基于ServletContext的。
- AnnotationConfigWebApplicationContext:从注解类中加载web上下文。
这些上下文中的实例在Spring中被叫做Bean。
- instantiate -- 实例化(构造器实例化、静态工厂方法实例化、实例工厂方法实例化、注解@Bean)【音死 tan兴 哎特】
- Populate properties 注入属性【破皮 内特 po 皮 特死 】
- BeanNameAware.setBeanName()
- BeanFactiryAware.setBeanFactory()
- BeanPostProcessor.postProcessBeanforeInitialization();bean初始化前添加自定义行为
- @postConstruct
- InitialzingBean.afterPropertiesSet()
- Custom init-method [xml 配置初始化方法]
- BeanPostProcessor.postProcessAfterInitialization();bean初始化前添加自定义行为
- Bean 准备就绪
- 容器关闭
- @preDestroy
- DisposableBean.destroy()
- Custom destroy-method
双亲上下文机制
很多情况下,配置一个或多个DispatcherServlet。每个dispatchServlet都有一个自己的WebApplicationContext上下文
无XML的配置方式
利用注解+代码配置,此方式是SpringBoot的基础 @Configuration @Bean @Profile @ComponentScan @EnableWebMVC @Import @PropertySource
SpringBoot运行原理
- @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
- 可以调用某个对象的方法或者访问它的属性
- 支持数学、关系、逻辑操作
- 正则表达式匹配
- 支持集合操作