spring
spring
Winn~
这个作者很懒,什么都没留下…
展开
-
面试经典-Spring篇
Autowired实例化一个ApplicationContext对象调用bean工厂后置处理器完成扫描循环解析扫描出来的类信息实例化一个BeanDefinition对象来存储解析出来的信息把实例化好的beanDeifinition对象put到beanDefinitionMap中缓存起来,以便后面实例化bean再次调用其他bean工厂后置处理器。原创 2024-04-05 10:36:39 · 417 阅读 · 0 评论 -
三分钟了解 SpringBoot 的启动流程
背景:最近有位开发同学说面试被问到Spring Boot 的启动流程,以及被问到Spring Boot 的嵌入式Web容器是什么时候加载的。如何加载的。是怎么无缝切换的。这些问题,其实回答起来也是比较复杂的。我们今天就从 SpringApplication.run(EasyPaasAdminApplication.class, args);入口,逐渐向下看下执行流程。来试着回答一下前面这两个问题。原创 2023-07-11 10:57:24 · 368 阅读 · 0 评论 -
聊透Spring事件机制
事件机制是Spring为企业级开发提供的神兵利器之一,它提供了一种低耦合、无侵入的解决方式。但其实Spring事件的设计其实并不复杂,它由三部分组成:事件、发布器、监听器。事件是主体,发布器负责发布事件,监听器负责处理事件。2.1定义自定义事件// 事件需要继承ApplicationEvent public class MyApplicationEvent extends ApplicationEvent {super(id);return id;} }2.2 发布自定义事件。原创 2023-01-09 18:08:15 · 831 阅读 · 0 评论 -
一张图看懂Spring BeanDefinition工作原理
原创 2022-01-14 16:21:52 · 212 阅读 · 0 评论 -
一张图看懂Spring bean生命周期
原创 2022-01-14 16:20:43 · 92 阅读 · 0 评论 -
一张图看懂Spring扫描流程
原创 2022-01-14 16:20:03 · 282 阅读 · 0 评论 -
一张图看懂Spring循环依赖
原创 2022-01-14 16:19:14 · 132 阅读 · 0 评论 -
一张图看懂Spring属性注入流程
原创 2022-01-14 16:18:09 · 216 阅读 · 0 评论 -
一张图看懂Spring源码
原创 2021-10-11 16:56:57 · 127 阅读 · 0 评论 -
008_实例Bean究竟如何完成创建
Bean实例究竟如何完成创建?来到AbstractAutowireCapableBeanFactory#createBeanInstance()方法:关键代码:Class<?> beanClass = this.resolveBeanClass(mbd,beanName,new Class[0])(这行代码是获取beanName对应的class)估计之后用反射实例时用的上判断RootBeanDefinition是否有FactoryMethodName方法,如果有,关键代码:this.in原创 2021-04-20 10:44:28 · 103 阅读 · 0 评论 -
007_Bean创建过程中都需要执行那些步骤
Bean究竟是如何完成创建的AbstractBeanFactory#doGetBean()方法,This.getSingle(beanName),首先获取缓存中是否存在final RootBeanDefinition mbd = this.getMergedLocalBeanDefinition(beanName):RootBeanDefinition这个类是继承于AbstractBeanDefinition,看看AbstractBeanDefinition有各种属性:beanClass、scope原创 2021-04-20 10:43:35 · 105 阅读 · 0 评论 -
006_启动过程完成最终的对象初始化
继续分析AbstractApplicationContext#refresh()方法This.finishBeanFactoryInitialization(beanFactory),完成对象最后的初始化;初始化LoadTimeWeaverAware实例,关键代码:beanFactory.getBeanNamesForType(LoadTimeWeaverAware.class, false, false)(通过工厂获取LoadTimeWeaverAware对应的bean名称);关键代码:this.原创 2021-04-20 10:42:37 · 118 阅读 · 0 评论 -
005_启动过程工厂设置BeanPostProcessor的相关逻辑
我们继续来看AbstractApplicationContext#refresh()方法:上一讲已经讲过获取一个beanFactory工厂,以及工厂中有哪些方法。接着往下看…This.postProcessBeanFactory(beanFactory),这个方法是给beanFactory加一个BeanPostProcessor处理器,这个处理看上去像bean发布到spring容器中前会回到的钩子处理器。这个方法是由子类重写的,根据不同的上下文环境,设置不同的BeanPostProcessor:Ab原创 2021-04-20 10:41:48 · 134 阅读 · 0 评论 -
004_默认的Bean工厂DefaultListableBeanFactory都干了哪些事
Spring boot 启动过程分析:一行代码进入启动:SpringApplication.run(Application.class, args);把启动类的class传了进去Return (new SpringApplication(sources)).run(args)看看SpringApplication构造方法,里面有关键的一行代码:this.initialize(sources);点进去initiallize()方法,可以看到初始化了webEnvironment为”javax.servl原创 2021-04-20 10:41:14 · 360 阅读 · 0 评论 -
003_@ComponentScan注解是怎么回事
@ComponentScan:根据定义的路径,把符合扫描规则的类装配到spring容器中ComponentScan类在spring-context项目中包含了basePackages,value数组,这个用来存储扫描包的基础路径包含了basePackageClasses用来记录被标记的类或接口包含了nameGenerator,用来命名扫描到的容器中的组件,包含了useDefaultFilters(),表明自动探查标注了@Component、@Repository、@Service、@Control原创 2021-04-20 10:40:25 · 174 阅读 · 0 评论 -
002_@EnableAutoConfiuration的作用是什么
@EnableAutoConfigurationcong从calsspath中搜索所有META-INF/spring.factories配置文件,然后将其中org.springframework.boot.autoconfigure.key对应的配置项加载到spring容器关键代码:@Import({EnableAutoConfigrationImportSelector.class})点进去EnableAutoConfigrationImportSelector类,关键方法selectImports原创 2021-04-20 10:38:50 · 159 阅读 · 0 评论 -
001_从第一个注解SpringBootConfiguration开始
Spring boot 的启动都是从@SpringBootApplication这个注解开始的,这个注解都有什么功能,为什么它就能启动一个Spring boot了点进去发现他包含了三个注解:@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan研究一下@SpringBootConfiguration@Configuration的替代方法,@SpringBootConfiguration允许自动找到配置在SpringBootC原创 2021-04-20 10:37:47 · 146 阅读 · 0 评论