Spring源码拜读之总体介绍

  1. 核心模块
    1. spring-core:依赖注入IOC与DI的最基本实现
    2. spring-beans:Bean工厂于Bean的装配
    3. spring-context:IOC容器
    4. spring-aop:面向切面编程的应用模块,整合asm、cglib、jdkProxy
    5. spring-websocket:主要是与web前端的全双工通讯协议
    6. spring-webflux:一个新的非阻塞函数式Reactive Web框架,可以用来建立异步的,非阻塞、事件驱动的服务 通信报文模块
  2. 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.  流程

  1. 监听servlet容器启动开始创建context
  2. 创建context:createWebApplicationContext 默认XmlWebApplicationContext
  3. 读取配置:加载spring-context.xml 并读取servletConfigInitParams配置的参数
  4. 加载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);

小结:

  1. springioc其实就是工厂+广播
  2. 工厂: 加载配置文件,反射生成bean对象,加载到map中
  3. 广播:初始化广播器,注册监听器,发布事件触发监听器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值