- 核心模块
- spring-core:依赖注入IOC与DI的最基本实现
- spring-beans:Bean工厂于Bean的装配
- spring-context:IOC容器
- spring-aop:面向切面编程的应用模块,整合asm、cglib、jdkProxy
- spring-websocket:主要是与web前端的全双工通讯协议
- spring-webflux:一个新的非阻塞函数式Reactive Web框架,可以用来建立异步的,非阻塞、事件驱动的服务 通信报文模块
- spring中使用到的设计模式
1.模板方法模式
应用场景:JdbcTemplate、HttpServlet
2.简单工厂
应用场景:spring中有两种bean,一种是普通bean,另一种是工厂bean。FactoryBean就是spring中工厂类的顶级接口,当通过类
名获取类的实例的时候,如果该类是一个工厂类即实现了Factory,他会自动调用其getObject方法,返回真的需要的对象。
3.工厂方法
应用场景:使用xml配置bean的时候,bean标签有个factory-method属性,该属性的值生成类的静态方法名。
4.观察者
应用场景:ContextLoaderListener
5.装饰器
应用场景:HttpHeadResponseDecorator
6.代理
应用场景:ProxyFactory、JdkDynamicFactory、CglibAopFactory
7.单例
应用场景:spring中的bean默认是单例的。
8.适配器
应用场景:AdvisorAdapter、HanderAdapter
9.原型模式:
应用场景:ProtorypeBean
2. 流程
- 监听servlet容器启动开始创建context
- 创建context:createWebApplicationContext 默认XmlWebApplicationContext
- 读取配置:加载spring-context.xml 并读取servletConfigInitParams配置的参数
- 加载bean对象:解析bean标签 加载bean工厂
prepareRefresh();
// Tell the subclass to refresh the internal bean factory.
ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();
// Prepare the bean factory for use in this context.
prepareBeanFactory(beanFactory);
try {
// Allows post-processing of the bean factory in context subclasses.
postProcessBeanFactory(beanFactory);
// Invoke factory processors registered as beans in the context.
invokeBeanFactoryPostProcessors(beanFactory);
// Register bean processors that intercept bean creation.
registerBeanPostProcessors(beanFactory);
// 为了国际化配置,Initialize message source for this context.
initMessageSource();
// 初始化事件广播器:Initialize event multicaster for this context.
initApplicationEventMulticaster();
// Initialize other special beans in specific context subclasses.
onRefresh();
// 注册广播监听器:Check for listener beans and register them.
registerListeners();
// Instantiate all remaining (non-lazy-init) singletons.
finishBeanFactoryInitialization(beanFactory);
// 发布事件 Last step: publish corresponding event.
finishRefresh();
最后一步会触发springmvc容器的加载
initMultipartResolver(context);
initLocaleResolver(context);
initThemeResolver(context);
initHandlerMappings(context);
initHandlerAdapters(context);
initHandlerExceptionResolvers(context);
initRequestToViewNameTranslator(context);
initViewResolvers(context);
initFlashMapManager(context);
小结:
- springioc其实就是工厂+广播
- 工厂: 加载配置文件,反射生成bean对象,加载到map中
- 广播:初始化广播器,注册监听器,发布事件触发监听器