Spring 源码分析
攻城遭雷劈
知其所以然
展开
-
Spring核心容器体系结构简述
读者从spring5源码下载,并源码编译。这里推荐IntelliJ IDEA 工具进行操作1.核心容器简述https://github.com/spring-projects/spring-framework.githttps://github.com/spring-projects/spring-framework.git(1) BeanFactorySpring Bean 的创建是典型的工厂模...原创 2018-06-24 13:50:11 · 948 阅读 · 0 评论 -
Spring AOP 代理
AspectJAwareAdvisorAutoProxyCreator是BeanPostProcessor接口的实现类postProcessBeforeInitialization方法实现在父类AbstractAutoProxyCreator中,在每个Bean初始化之后,如果需要,调用AspectJAwareAdvisorAutoProxyCreator中的postProcessBeforeIni...原创 2018-06-26 14:10:39 · 165 阅读 · 0 评论 -
Spring AOP 解析
这里不提供AOP的示例了,直接怼源码。 <bean id="testtImpl" class="org.test.aop.TestImpl" /> <bean id="timeHandler" class="org.test.aop.TimeHandler" /> //启用了强制CGLIB代理 <aop:config proxy-t原创 2018-06-26 10:53:09 · 200 阅读 · 0 评论 -
DispatcherServlet接收请求
1:DispatcherServlet 是 SpringMVC 中的前端控制器(Front Controller),负责接收 Request并将 Request 转发给对应的处理组件.2:HanlerMapping 是 SpringMVC 中完成 url 到 Controller 映射的组件.DispatcherServlet接收 Request,然后从 HandlerMapping 查找处理 R...原创 2018-06-25 14:32:01 · 2091 阅读 · 0 评论 -
url 和 Controller 的对应关系
很多人对这一块比较茫然,比如在网页输入 /index/test.do就找到对了对应的Controller 类。url和Controller 关系怎么建立的。AbstractHandlerMethodMapping实现了InitializingBean接口。说明这个类会在依赖注入的初始化开始执行,也就是Init-method那个解析地方处理这个扩展点。其源码分析:在AbstractHandlerMe...原创 2018-06-25 10:59:21 · 3292 阅读 · 1 评论 -
IOC容器中常用扩展点
1.BeanPostProcessor 后置处理器的实现BeanPostProcessor 后置处理器是 Spring IOC 容器经常使用到的一个特性, 这个 Bean 后置处理器是一个监听器, 可以监听容器触发的 Bean 声明周期事件。 后置处理器向容器注册以后, 容器中管理的 Bean就具备了接收 IOC 容器事件回调的能力。BeanPostProcessor 的使用非常简单, 只需要提供...原创 2018-06-24 23:09:39 · 374 阅读 · 0 评论 -
基于 Annotation 的依赖注入
1.AnnotationConfigApplicationContext对注解Bean初始化:Spring中,管理注解Bean定义的容器有两个:AnnotationConfigApplicationContext和AnnotationConfigWebApplicationContex。这两个类是专门处理Spring注解方式配置的容器,直接依赖于注解作为容器配置信息来源的IOC容器。Annotat...原创 2018-06-24 20:02:41 · 2405 阅读 · 0 评论 -
基于 XML 的依赖注入
1.依赖注入发生的时间(1).用户第一次通过getBean方法向IOC容索要Bean时,IOC容器触发依赖注入。(2).当用户在Bean定义资源中为<bean>元素配置了lazy-init属性,即让容器在解析注册Bean定义时进行预实例化,触发依赖注入。BeanFactory接口定义了SpringIOC容器的基本功能规范,是SpringIOC容器所应遵守的最底层和最基本的编程规范。Be...原创 2018-06-24 19:33:29 · 547 阅读 · 0 评论 -
自定义标签源码分析
自定义标签使用自定义标签源码解析:相信了解了自定义标签的使用方法后,会对自定义标签实现过程有一个大概思路。无非是根据对应的bean获取对应的命名空间,根据命名空间解析对应的处理器,然后根据用户自定义处理器进行解析。(1)获取标签的命名空间这里获取的节点已经加载了一个xml配置,通过这个方法可以获取到标签的命名空间(2)提取自定义标签处理器有了命名空间,就可以进行NamespaceHandler的提...原创 2018-06-24 17:48:51 · 435 阅读 · 0 评论 -
自定义标签使用
(1)定义普通bean类public class User { private String id; private String userName; private String email; public String getId() { return id; } publi...原创 2018-06-24 16:42:09 · 241 阅读 · 0 评论 -
IOC容器的初始化(二)
继续上一节降到解析到<alias>元素之后的内容(12)、 BeanDefinitionParserDelegate 解析 Bean 定义资源文件中的<bean>元素: Bean 定义资源文件中的<import>和<alias>元素解析在 DefaultBeanDefinitionDocumentReader中已经完成, 对 Bean 定义资源文件中...原创 2018-06-24 16:16:05 · 241 阅读 · 0 评论 -
IOC容器的初始化(一)
IOC 容器的初始化包括 BeanDefinition 的 Resource 定位、载入和注册这三个基本的过程。我们以 ApplicationContext 为例讲解,ApplicationContext 系列容器也许是我们最熟悉的,因为 Web 项 目 中 使 用 的 XmlWebApplicationContext 就 属 于 这 个 继 承 体系 , 还 有ClasspathXmlAppli...原创 2018-06-24 15:21:51 · 899 阅读 · 0 评论 -
Spring 事务(一)
事物自定义标签<tx:annotation-driven/>那我们就从这个标签入手,那一定会在spring-tx项目中。从resources\META-INF\spring.handlers里面查看会转向到TxNamespaceHandler类。public class TxNamespaceHandler extends NamespaceHandlerSupport { ...原创 2018-06-28 16:04:53 · 450 阅读 · 0 评论