
Spring IOC
文章平均质量分 76
Spring IOC
码拉松
这个作者很懒,什么都没留下…
展开
-
构造方法注入SpringBean对象失败的原因分析
Spring构造方法注入报错原创 2022-02-15 09:11:26 · 2555 阅读 · 0 评论 -
Spring为@Configuration注解修改的类生成代理对象原因分析
前言在Spring中只要被@Configuration注解修饰的类,Spring就会为其生成代理对象,至于这样做的主要原因就是为了解决生成对象的单例问题。具体说明实际上作者在ConfigurationClassEnhancer这个类也有注解说明具体场景如果Spring不做处理,下面输出的一定的是false,但是实际上输出的结果是true,那么只有可能是代理类做了特殊处理。@Configurationpublic class MyConfiguration { @Bean pu原创 2022-02-06 23:27:14 · 1777 阅读 · 1 评论 -
从工厂模式理解Spring中BeanFactory
工厂方法模式工厂方法模式是一种实例化对象的模式,属于创建型模式,一般又可以分为简单工厂模式、工厂模式、抽象工厂模式,一般对于需要生成复杂对象的场景中,我们就可以使用工厂方法模式。实际常用方法在大多数情况下,我们一般不会像经典实现方式那样去做,而是结合静态方法那样,比如类似下面的这些方法:看上去是不是也很像是单例模式,没错,实际上可以把两种模式结合一下。public class InstanceFactory { private static final Map<String,原创 2021-08-14 20:58:54 · 1599 阅读 · 0 评论 -
Spring中ApplicationListener监听器设计解析
在设计模式中,观察者模式中主要由观察者和主题事件这两个角色组成,而Spring中的监听器设计相对设计模式中的观察者模式来说更加抽象,主要多出了一些额外的角色,目的是为了能够更好的让观察者和事件解耦,一起来学习一下吧!设计模式中的观察者模式 V.S Spring监听器设计模式中的观察者模式角色:抽象主题(Subject):它把所有观察者对象的引用保存到一个聚集里,每个主题都可以有任何数量的观察者。 抽象主题提供一个接口,可以增加和删除观察者对象。具体主题(Concrete Subject):原创 2020-11-24 17:05:05 · 709 阅读 · 1 评论 -
解析Spring中@Import的实现原理
@Import介绍@Import注解通常用于添加一些自定义的bean到Spring容器中,就相当于在xml中定义一样,与xml或者其他注解注入方式不同的是,@Import更加灵活,可以自定义实现各种处理逻辑来决定是否需要添加bean到容器中,SpringBoot的自动化装配,一大层面上就是依赖@Import完成的,通过它把写在配置文件中的一些内容注入到Spring容器中。@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Docu原创 2020-11-11 12:02:19 · 1401 阅读 · 1 评论 -
Spring实现自定义XML标签详解
前言学习spring源码已经有一年多了,了解过的朋友肯定都知道spring源码是一块非常难啃的骨头,所以每当找到一丝丝成就感就想拿出来与大家一起分享,这样也能让自己始终保持着对spring源码学习的兴趣。虽然现在使用xml已经不是主流的方式了,但是一些公共的开源组件都基于自身的功能定制了自定义标签,比如dubbo。自定义XML关键的几个配置spring.handler定义解析xml元素的处理类。spring.schemas指定xsd文件的位置。xxx.xsd类似于语法规范,约束自定义标签原创 2020-10-31 16:59:44 · 1206 阅读 · 0 评论 -
Spring中修改allowBeanDefinitionOverriding和allowCircularReferences属性的两种方式
allowBeanDefinitionOverriding属性含义设置是否允许通过注册具有相同名称的不同定义来覆盖bean定义,并自动替换前者。否则,将引发异常。默认值为“true”。allowCircularReferences属性含义设置是否允许bean之间的循环引用并自动尝试解析它们。默认值为“true”。关闭此选项可在遇到循环引用时引发异常,完全不允许循环引用。循环依赖应该都比较了解,主要看看allowBeanDefinitionOverriding。public class TestS原创 2020-10-28 16:26:07 · 9376 阅读 · 2 评论 -
Spring面试系列---BeanFactory和FactoryBean的区别
BeanFactory和FactoryBean都是Spring中定义的接口,但是实际上这两个接口关联并不大,也就名字有点相似了,但却经常被当做面试题来谈论,本文就简单来分析一下这两个接口的作用。BeanFactory先来看一下BeanFactory中定义的接口,我们可以看到大多数都是关于获取bean对象的接口,这也符合类名的定义,这是一个bean工厂的接口,也就是负责获取bean对象的。public interface BeanFactory { String FACTORY_BEAN_PREFI原创 2020-08-29 19:55:39 · 738 阅读 · 0 评论 -
解析Spring中@Bean的实现原理
解析Spring中@Bean的实现原理原创 2020-08-26 16:25:19 · 7255 阅读 · 6 评论 -
Spring面试系列---BeanFactoryPostProcessor和BeanPostProcessor的区别
BeanFactoryPostProcessor原创 2020-08-25 17:37:06 · 1256 阅读 · 0 评论 -
深入源码分析Spring为什么不支持构造方法的循环依赖
我们知道当通过构造方法的方式注入属性时,是不支持循环依赖这种场景的,本文主要通过分析源码看看为什么构造方法不能支持循环依赖。当然,如果读者还不了解循环依赖的问题,建议先结合源码搞清楚,可以先看看这篇文章,深入源码分析Spring如何解决循环依赖,否则很有可能看不懂本文内容。先看问题@Componentpublic class TestA { private final TestB testB; public TestA(TestB testB) { this.t原创 2020-08-21 15:11:33 · 2397 阅读 · 3 评论 -
深入源码分析Spring如何解决循环依赖
什么是循环依赖?假设spring现在有两个类需要加载,分别如下:@Componentpublic class TestA { @Autowired private TestB testB;}@Componentpublic class TestB { @Autowired private TestA testA;}就这就是循环依赖,注入TestA时需要注入TestB,于是就会开始注入TestB,注入TestB时又发现需要注入TestA。。。怎么样,看起来就原创 2020-08-20 19:14:24 · 573 阅读 · 0 评论 -
解析Spring中FactoryBean的实现原理
FactoryBean是Spring中的一个接口,其主要作用是可以让使用者自己定义bean的创建过程,对于一些复杂的bean对象,就可以使用FactoryBean的方式来实现,比如MyBatis中的SqlSessionFactoryBean、MapperFactoryBean。FactoryBean接口中只定义了三个方法。public interface FactoryBean<T> { String OBJECT_TYPE_ATTRIBUTE = "factoryBeanObjectT原创 2020-08-14 23:00:33 · 730 阅读 · 0 评论 -
解析BeanPostProcessor系列之AutowiredAnnotationBeanPostProcessor
AutowiredAnnotationBeanPostProcessor间接的实现了BeanPostProcessor,主要是用来处理@Autowired,@Value两种注释的,在处理当前bean对象依赖注入时会使用这个扩展,也是依赖注入的关键处理类。类的结构图doCreateBean是一个核心方法,这个方法涵盖的内容很多,针对本文内容只需关注applyMergedBeanDefinitionPostProcessors,populateBean这两个方法。 protected Object do原创 2020-08-11 15:01:04 · 1572 阅读 · 2 评论 -
通过ApplicationContextAware接口获取ApplicationContext原理分析
当在项目需要用到spring中的bean对象时,一般做法就是实现ApplicationContextAware接口,通过这个接口就可以获取到ApplicationContext对象,进入从ApplicationContext中获取所需要bean对象。代码演示在spring容器中放入一个HelloSpring对象@Componentpublic class HelloSpring { public void hello(){ System.out.println("hello原创 2020-08-06 14:13:18 · 1083 阅读 · 0 评论 -
解析BeanPostProcessor系列之CommonAnnotationBeanPostProcessor
BeanPostProcessor是spring提供的一个扩展接口,通过定义的两个接口可以实现在初始化之前、之后对bean做一些修改,或者其他预处理,后处理等操作。public interface BeanPostProcessor { /** * Apply this {@code BeanPostProcessor} to the given new bean instance <i>before</i> any bean * initialization call原创 2020-08-05 22:10:00 · 922 阅读 · 0 评论 -
Spring加载ConfigurationClassPostProcessor等其他内部处理类的流程
ConfigurationClassPostProcessor是spring中非常重要的类,@Component,@ComponentScan,@Import,@Bean这些最常用到的注解都是由ConfigurationClassPostProcessor负责解析的,本文暂不讲解ConfigurationClassPostProcessor解析这些标签的流程,主要先来了解一下ConfigurationClassPostProcessor本身是如何被spring加载的。一般情况下我们都会使用Annotati原创 2020-08-05 11:16:23 · 646 阅读 · 0 评论 -
解析BeanPostProcessor系列之ApplicationContextAwareProcessor
ApplicationContextAwareProcessor直接实现了BeanPostProcessor接口,其作用主要是为一些Aware类型的接口,注入对应的属性值。源码部分class ApplicationContextAwareProcessor implements BeanPostProcessor { private final ConfigurableApplicationContext applicationContext; private final StringValue原创 2020-08-04 21:43:24 · 923 阅读 · 0 评论