Spring注解源码解析
以HelloWorld级别示例为切入点,深入剖析Spring源码。
想当厨子的程序媛
前期追深度,否则会华而不实,后期追广度,否则会坐井观天;
展开
-
3-(3) Spring之解析xml文件与BeanDefinition
Spring中有2个很重要的类,在分析Spring源码之前,我们先来了解几个Spring中的核心类。一、DefaultListableBeanFactory我们从上面的图中可以看出,XmlBeanFactory 继承自 DefaultListableBeanFactory,而DefaultListableBeanFactory是整个Bean 加载的核心部分,是Spring注册和加载 bean的默认实现,而对于 XmlBeanFactory 与 DefaultListableBeanFactory 不同原创 2020-09-13 10:54:59 · 409 阅读 · 0 评论 -
3-(2) Spring之ApplicationContext配置文件的方式
通常,我们有2种方式来利用Spring, 第一种方式是使用配置的方式,第二种方式是:注解的方式。配置方式-1BeanFactory bf = new XmlBeanFactory(new ClasswPthResource("test.xml"));配置方式-2ApplicationContext ac = new ClassPathXmlApplicationContext("text.xml");注解方式ApplicationContext applicationContex原创 2020-09-08 21:13:46 · 627 阅读 · 0 评论 -
2-Spring源码解析之默认标签的解析(1)
Spring中的标签包括【默认标签】和【自定义标签】两种。默认标签的解析是在 DefaultBeanDefinitionDocumentReader 类的 parseDefaultNamespace 方法中进行。我们先来看一下parseDefaultNamespace方法的具体实现。 private void parseDefaultElement(Element ele, BeanDefinitionParserDelegate delegate) { // 对 import 标签原创 2020-09-06 15:48:00 · 335 阅读 · 0 评论 -
28-Spring源码解析之事务(1)——事务初始化源码
Spring版本:<version>5.2.1.RELEASE</version>Spring中声明式事务让我们从复杂的事务处理中得到解脱,使我们再也不需要去处理获得连接、关闭连接、事务提交和事务回滚等操作,再也不需要在与事务相关的方法中处理大量的try...catch...finally代码。Spring中事务的使用虽然已经相对简单很多,但是,还是有很多的使用及配置...原创 2020-03-20 09:21:16 · 637 阅读 · 0 评论 -
27-Spring源码解析之AOP(6)
占坑原创 2020-03-20 09:20:11 · 259 阅读 · 1 评论 -
26-Spring源码解析之AOP(5)
占坑原创 2020-03-20 09:19:37 · 246 阅读 · 2 评论 -
25-Spring源码解析之AOP(4)——创建AOP代理(1)
Spring版本:<version>5.2.1.RELEASE</version>上一篇:24-Spring源码解析之AOP(3)——解析@Aspect获取增强器上一篇我们讲完了解析@Aspect注解并获取增强器的时机和如何获取增强器。在获取增强器后,就是开始对创建的Bean进行分析看其是否需要创建对应的AOP代理。那么本篇文章就开始讲解切面类(LogAspect...原创 2020-03-14 16:13:14 · 924 阅读 · 5 评论 -
24-Spring源码解析之AOP(3)——解析@Aspect获取增强器
Spring版本:<version>5.2.1.RELEASE</version>上一篇:23-Spring源码解析之AOP(2)——AnnotationAwareAspectJAutoProxyCreator类源码上一篇我们讲完了与AOP功能相关的四个问题中的两个问题: 【问题一】为什么在配置类中写了 @EnableAspectJAutoProxy注解,Spr...原创 2020-03-13 17:02:35 · 877 阅读 · 3 评论 -
23-Spring源码解析之AOP(2)——AnnotationAwareAspectJAutoProxyCreator类源码
Spring版本:<version>5.2.1.RELEASE</version>上一篇:22-Spring源码解析之AOP(1)——@EnableAspectJAutoProxy注解原理上一篇我们完成了@EnableAspectJAutoProxy注解的解析,@EnableAspectJAutoProxy注解就解析完成,解析的结果就是:将AnnotationAwa...原创 2020-03-12 12:20:31 · 451 阅读 · 3 评论 -
22-Spring源码解析之AOP(1)——@EnableAspectJAutoProxy注解原理
Spring版本:<version>5.2.1.RELEASE</version>目录一、`AOP`概览1. 例子1.1 创建用于拦截的`Bean`1.2 切面类1.3 配置类1.4 测试类1.5 测试结果二、 `@EnableAspectJAutoProxy`注解三、解析`@EnableAspectJAutoProxy`注解上一篇:21-Spring源码解析——I...原创 2020-03-11 20:24:22 · 1021 阅读 · 0 评论 -
21-Spring源码解析——IOC容器创建与Bean生命周期总结
这是一个总结文章,将IOC容器创建与Bean生命周期的整个流程做一个大总结未完待续,先占坑!原创 2020-03-11 10:39:39 · 371 阅读 · 3 评论 -
20-Spring源码解析之DI依赖注入——@Autowire注解源码 与 populate 源码
Spring版本:<version>5.2.1.RELEASE</version>上一篇:19-Spring源码解析之Bean的生命周期(4)——initializeBean上一篇我们讲完了Bean的生命周期的整个流程,但是遗留了一个非常重要的问题,就是依赖注入(DI)问题。IOC的一个重点是在系统运行中,动态的向某个对象提供它需要的其他对象。这一点就是通过DI来...原创 2020-03-11 10:35:20 · 348 阅读 · 2 评论 -
19-Spring源码解析之Bean的生命周期(4)——initializeBean
Spring版本:<version>5.2.1.RELEASE</version>目录一、`initializeBean`二、【功能一】激活`Aware`方法1.1 `Aware`的例子1.1.1 定义普通的`Bean`1.1.2 定义`BeanFactoryAware`的实现类1.1.3 配置类1.1.4 测试类1.1.5 测试结果1.2 `invokeAwareM...原创 2020-03-10 16:38:55 · 416 阅读 · 1 评论 -
18-Spring源码解析之Bean的生命周期(3)——【doCreateBean】和【createBeanInstance】
Spring版本:<version>5.2.1.RELEASE</version>上一篇:17-Spring源码解析之Bean的生命周期(2)——【getSingleton】和【createBean】上一篇我们讲到了getSingleton方法调用createBean方法来准备创建Bean。通过上一篇文章,我们也了解到,createBean方法首先调用resolve...原创 2020-03-10 14:58:46 · 808 阅读 · 0 评论 -
17-Spring源码解析之Bean的生命周期(2)——【getSingleton】和【createBean】
Spring版本:<version>5.2.1.RELEASE</version>上一篇:16-Spring源码解析之Bean的生命周期(1)——doGetBean上一篇我们介绍了doGetBean包含的功能,在【功能八中】,doGetBean会根据Bean的scope类型进行Bean的加载。因为当前是Spring容器的创建,因此程序走到这一步的时候,创建的Bean...原创 2020-03-09 14:30:40 · 727 阅读 · 1 评论 -
16-Spring源码解析之Bean的生命周期(1)——doGetBean
Spring版本:<version>5.2.1.RELEASE</version>上一篇:15-Spring源码解析之refresh(8)——【finishBeanFactoryInitialization】本篇我们来解决上一篇中遗留的问题,即finishBeanFactoryInitialization中是如何通过getBean来创建Bean实例的。为了更好更清...原创 2020-03-08 17:34:15 · 639 阅读 · 0 评论 -
15-Spring源码解析之refresh(8)——【finishBeanFactoryInitialization】
Spring版本:<version>5.2.1.RELEASE</version>上一篇:14-Spring源码解析之refresh(7)——【onRefresh】和【registerListeners】上一篇,我们讲解了refresh方法中调用的第9个onRefresh方法和第10个registerListeners方法。接着本篇文章讲解refresh方法调用的第...原创 2020-03-07 18:46:05 · 462 阅读 · 0 评论 -
14-Spring源码解析之refresh(7)——【onRefresh】和【registerListeners】
上一篇: 13-Spring源码解析之refresh(6)——【initMessageSource】和【initApplicationEventMulticaster】上一篇,我们讲解了refresh方法的第7个initMessageSource和第8个initApplicationEventMulticaster方法。接着本篇文章讲解refresh方法中调用的第9个onRefresh方法和第1...原创 2020-03-07 17:47:03 · 575 阅读 · 0 评论 -
13-Spring源码解析之refresh(6)——【initMessageSource】和【initApplicationEventMulticaster】
上一篇:12-Spring源码解析之refresh(5)——registerBeanPostProcessors上一篇我们分析完了registerBeanPostProcessors,接下来,我们开始分析refresh中的第七个方法initMessageSource和第八个方法initApplicationEventMulticaster一、initMessageSource初始化Messa...原创 2020-03-06 20:45:10 · 359 阅读 · 0 评论 -
12-Spring源码解析之refresh(5)——registerBeanPostProcessors
Spring版本:<version>5.2.1.RELEASE</version>上一篇:11-Spring容器创建之refresh(4)——invokeBeanFactoryPostProcessors(2)上一篇,我们介绍完了S原创 2020-03-06 18:57:37 · 562 阅读 · 0 评论 -
11-Spring源码解析之refresh(4)——invokeBeanFactoryPostProcessors(2)
Spring版本:<version>5.2.1.RELEASE</version>上一篇:10-Spring容器创建之refresh(4)——invokeBeanFactoryPostProcessors(1)上一篇还遗留了两个问题,这两个问题非常重要invokeBeanDefinitionRegistryPostProcessors(currentRegis...原创 2020-03-04 21:35:16 · 488 阅读 · 0 评论 -
10-Spring源码解析之refresh(4)——invokeBeanFactoryPostProcessors(1)
上一篇:9-Spring容器创建之refresh(3)——【prepareBeanFactory】与【postProcessBeanFactory】上篇文章讲的是refresh方法中调用的第三个方法prepareBeanFactory和第四个方法postProcessBeanFactory,本篇文章我们来接着介绍refresh的第五个方法,也是非常重要的方法:invokeBeanFactory...原创 2020-03-04 12:25:46 · 1103 阅读 · 5 评论 -
9-Spring源码解析之refresh(3)——【prepareBeanFactory】与【postProcessBeanFactory】
上一篇:8-Spring容器创建之refresh(2)——【prepareRefresh】与【ConfigurableListableBeanFactory】上一篇文章介绍玩了refresh方法中的前两个方法,本篇文章我们继续介绍refresh方法中的第三个方法prepareBeanFactory和第四个方法postProcessBeanFactory。1. prepareBeanFactor...原创 2020-03-03 17:37:40 · 652 阅读 · 0 评论 -
8-Spring源码解析之refresh(2)——【prepareRefresh】与【ConfigurableListableBeanFactory】
上一篇:Spring容器创建之refresh(1)——概览上一篇介绍了refresh方法的概览,其中包含12个方法,接下来我们就依照顺序依次聊一下每个方法所实现的功能以及如何实现的。这篇文章先介绍【prepareRefresh】与【ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory()】。1. prepare...原创 2020-03-02 20:40:31 · 587 阅读 · 0 评论 -
7-Spring源码解析之refresh(1)——概览
上一篇:Spring容器创建(3)——register注册配置类上一篇我们讲到执行完register()方法, public AnnotationConfigApplicationContext(Class<?>... annotatedClasses) { // 1. 首先初始化Spring的7个内置Bean后置处理器,并放到 DefaultListableBeanFacto...原创 2020-03-01 18:24:33 · 640 阅读 · 0 评论 -
Spring源码解析之【BeanFactory】与【BeanDefinitionRegistry】
在分析了Spring的源码之后发现,Spring里面用了很多的BeanFactory,这个类非常重要,因为实际上在Spring中BeanFactory是IOC容器的实际代表者,它用来创建和管理Bean。它为其他具体的IOC容器提供了最基本的规范,它是一个接口类型。BeanFactory是最典型的工厂方法模式。不同类型的工厂会生产不同类型的商品。它的子接口和对应的实现类结构如下:我们可以看到在...原创 2020-03-01 14:03:24 · 1720 阅读 · 0 评论 -
6-Spring源码解析之register——register(annotatedClasses)注册配置类
上一篇我们讲到执行完this()方法 public AnnotationConfigApplicationContext(Class<?>... annotatedClasses) { // 1. 首先初始化Spring的7个内置Bean后置处理器,并放到 DefaultListableBeanFactory 类型的对象 beanFactory 中 // 2. 创建Sprin...原创 2020-02-29 21:08:32 · 1394 阅读 · 0 评论 -
5-Spring源码解析之this()(2)——ClassPathBeanDefinitionScanner
上一篇我们讲到 private final AnnotatedBeanDefinitionReader reader; public AnnotationConfigApplicationContext() { // 步骤1:获取Spring7个内置处理器 this.reader = new AnnotatedBeanDefinitionReader(this); // 步骤2:获...原创 2020-02-29 15:56:23 · 684 阅读 · 0 评论 -
4-Spring源码解析之this()(1)——AnnotatedBeanDefinitionReader
1. 程序入口AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfig.class);2. AnnotationConfigApplicationContext类有参构造器其中MainConfig类是自己写的配置类,我们从这一行代码来开始...原创 2020-02-29 13:44:49 · 1202 阅读 · 4 评论 -
3-(1) Spring之AnnotationConfigApplicationContext的2种构造方法
1. 举个栗子先给出一个小Demo1.1 POJO类import org.springframework.beans.factory.annotation.Value;public class Person { private String name; private Integer age; private String nickName; ...原创 2020-02-24 19:19:21 · 530 阅读 · 0 评论 -
2- @ComponentScan注解
1. @ComponentScan 注解在配置类中只要标注了@ComponentScan 注解,Spring就可以自动扫描Value对应的包了1.1. 配置类package com.spring.config;import com.spring.beans.Person;import org.springframework.context.annotation.Bean;import...原创 2020-02-23 20:46:48 · 405 阅读 · 0 评论 -
1-Maven创建一个的Spring项目(IDEA)
准备工作:首先电脑里需要有IDEA和Maven。1. 创建maven工程首先打开IDEA,然后开始new一个新的project,具体如下以上一个Maven的Spring项目就创建出来了,创建好的Spring项目的包结构如下com.spring.annotation包下只有一个APP.java文件是Spring的入口文件2. 导入Spring依赖创建好工程后,我们需要在pom中...原创 2020-02-23 20:04:10 · 485 阅读 · 0 评论