
spring-ioc
文章平均质量分 73
三颗青菜
这个作者很懒,什么都没留下…
展开
-
@Import注解的作用
本文转自@Import注解的作用1.简介在平时看源码或者很多配置类上面都会出现@Import注解,功能就是和Spring XML 里面 的 一样. @Import注解是用来导入配置类或者一些需要前置加载的类.通俗的将就是将类放入到IOC容器中。2.源码解析2.1 导入配置的三种类型@Import支持三种方式带有@Configuration的配置类(4.2 版本之前只可以导入配置类,4.2版本之后 也可以导入 普通类)ImportSelector 的实现ImportBeanDefinitio转载 2020-11-06 12:13:25 · 2222 阅读 · 0 评论 -
【Spring-5.3】AbstractAutowireCapableBeanFactory#initializeBean实现Bean的初始化
实例化对象之后,对对象进行属性注入,之后就是初始化操作了。进入方法org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#initializeBean(java.lang.String, java.lang.Object, org.springframework.beans.factory.support.RootBeanDefinition) protected Object initializeBea原创 2022-08-04 21:02:31 · 332 阅读 · 0 评论 -
【Spring-5.2】AbstractAutowireCapableBeanFactory#populateBean实现Bean的属性赋值
本章是属性注入的详细分析先获取类的需要注入的属性信息applyMergedBeanDefinitionPostProcessors方法。 if (mbd.isSingleton()) { instanceWrapper = this.factoryBeanInstanceCache.remove(beanName); } if (instanceWrapper == null) { instanceWrapper = createBeanInstance(beanName, mb原创 2022-08-04 20:48:08 · 304 阅读 · 0 评论 -
【Spring-5.1】AbstractAutowireCapableBeanFactory#createBeanInstance实例化对象
AbstractBeanFactory.getBean(String name):getBean(String name) public Object getBean(String name) throws BeansException { return doGetBean(name, null, null, false); }doGetBean()方法有两个功能,如果之前创建了对象,就直接取;要是没有创建会先创建。doGetBean大体也是分为三大块,if-else,还有个其他的,先看if逻原创 2022-08-04 11:32:03 · 235 阅读 · 2 评论 -
【Spring-5】AbstractBeanFactory#doGetBean创建实例完整流程
前一篇文章分析了获取bean的过程。下面分析bean的实例化过程。org.springframework.beans.factory.support.AbstractBeanFactory#doGetBean;进入方法中的else块; // 如果正在创建,则直接抛出异常,(应该是多线程下创建同一个对象) if (isPrototypeCurrentlyInCreation(beanName)) { throw new BeanCurrentlyInCreationException(b原创 2022-08-04 10:46:03 · 269 阅读 · 0 评论 -
【Spring-4】refresh方法之finishBeanFactoryInitialization
该方法主要处理实例化bean的操作,懒加载的bean在调用的时候实例化,不是懒加载的则在此时进行实例化。 @Override public void preInstantiateSingletons() throws BeansException { if (logger.isTraceEnabled()) { logger.trace("Pre-instantiating singletons in " + this); } // 找到所有的注册的bd List<Stri原创 2022-08-04 10:44:23 · 165 阅读 · 1 评论 -
【Spring-3.4】解析配置类,标注import注解
processImports(configClass, sourceClass, getImports(sourceClass), filter, true);先看下org.springframework.context.annotation.ConfigurationClassParser#getImports方法。 private Set<SourceClass> getImports(SourceClass sourceClass) throws IOException { ..原创 2022-08-03 23:14:08 · 231 阅读 · 0 评论 -
【Spring-3.3】解析配置类,标注@Bean注解
// Process individual @Bean methods Set<MethodMetadata> beanMethods = retrieveBeanMethodMetadata(sourceClass); for (MethodMetadata methodMetadata : beanMethods) { configClass.addBeanMethod(new BeanMethod(methodMetadata, configClass)); }o..原创 2022-08-03 23:13:46 · 231 阅读 · 0 评论 -
【Spring-3.2】解析配置类,标注ComponentScan注解
Set<AnnotationAttributes> componentScans = AnnotationConfigUtils.attributesForRepeatable( sourceClass.getMetadata(), ComponentScans.class, ComponentScan.class); if (!componentScans.isEmpty() && !this.conditionEvaluator.shouldSkip(..原创 2022-08-03 23:13:24 · 289 阅读 · 1 评论 -
【Spring-3.1】解析配置类,标注Component注解。
如果有内部类,并且是有几个注解标注,Component,ComponentScan,Import,ImportResource或者内部f类方法中有@bean标注,先解析内部类中的。内部新建一个ConfigurationClass对象。原创 2022-08-03 23:13:09 · 213 阅读 · 0 评论 -
【Spring-3】ConfigurationClassPostProcessor解析配置类
我们自己写的类,通过标注注解,被注入到了spring容器中,具体是如何实现的呢,下面详细分析下。。。入口org.springframework.context.annotation.ConfigurationClassPostProcessor,它是一个BeanDefinitionRegistryPostProcessor,自然是在refresh()最开始的时候被实例化的,注入到bean工厂是在spring内部自己注入注册的,这里的注册是bd的注册。既然它是BeanDefinitionRegistryP原创 2022-08-03 23:12:26 · 284 阅读 · 4 评论 -
【Spring-2】refresh方法中的invokeBeanFactoryPostProcessors方法
invokeBeanFactoryPostProcessors方法中是通过PostProcessorRegistrationDelegate类调用bean工厂的后置处理器,传参两个,beanFactory,后置处理器集合。 PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(beanFactory, getBeanFactoryPostProcessors());进入invokeBeanFactoryPostProces原创 2022-08-03 23:12:13 · 149 阅读 · 0 评论 -
【Spring-1】源码分析
关于spring,我的理解主要有两部分。1,自定义的处理器是如何注入到IOC容器中的的?2,容器是如何实例化对象的?从这两点触发,开始分析spring的源码。由于现在大部分都是用注解开发或者是APIConfig,所以源码也是分析的注解这块的逻辑。配置文件的逻辑其实大致一样。就是从解析配置类中的注解,变成了解析文件中的标签。使用的是这个构造器,传入的是配置类。这里需要提一句的是AnnotatedBeanDefinitionReader初始化的时候,注册了一些spring自己需要的类。从构造器出发注册原创 2022-08-03 23:11:54 · 117 阅读 · 0 评论 -
【Spring-IOC】SpringIOC容器-bean的解析封装为BeanDefinition
我们在用context获取bean的时候,其实底层都是操作的DefaultListableBeanFactory这个类。这个类中主要分为两块:注册bean:解析class,封装为beanDefinition对象;从beanDefinition中实例化对象。先看下是如何保存数据的。beanDefinition对象DefaultListableBeanFactory中的属性: // key:bean的名称 // value:BeanDefinition对象 private final Map原创 2022-02-06 15:20:45 · 523 阅读 · 0 评论