以下顺序为启动过程中的调用顺序 BeanDefinitionRegistryPostProcessor void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException; 注册BeanDefinition BeanFactoryPostProcessor void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException; 扩展beanFactory InstantiationAwareBeanPostProcessor Object postProcessBeforeInstantiation(Class 实例化前,返回非null的话,就不走默认的实例化逻辑 Supplier T get(); 这是Spring提供给开发者的扩展点,如果我们要自己来实现创建对象的过程, 那么就可以提供一个Supplier的实现类, 当一个BeanDefi.... Spring启动过程中的扩展点 spring
Spring最重要的功能就是帮助程序员创建对象(也就是IOC),而启动Spring就是为创建Bean对象做准备,所以我们先明白Spring到底是怎么去创建Bean的,也就是先弄明白Bean的生命周期。 Bean的生命周期就是指:在Spring中,一个Bean是如何生成的,如何销毁的? Bean的生成过程 1. 生成BeanDefinition Spring启动的时候会进行扫描,会先调用 Resource[] resources = getResourcePatternResolver().getResources(packageSearchPath); 拿到所指定的包路径下的所有文件资源(******.class文件) 然后会遍历每个Resource,为每个Resource生成一个MetadataReader对象,这个对象拥有三个功能: 获取对应的Resource资源 获取Resource对应的class的元数据信息,包括类的名字、是不是接口、是不是一个注解、是不是抽象类、有没有父类,父类的名字,所实现的所有接口的名字,内部类的类名等等。 获取Resource对应的class上的....... Spring | 三、Spring中Bean的生命周期详解 spring
BeanDefinition Bean的定义,在Spring中,我们可以如何去定义一个Bean? <bean/> @Bean @Component(@Service,@Controller) 还有就是可以通过BeanDefinition 比如,我们可以通过定义一个BeanDefinition对象来表示定义了一个Bean: // 定义了一个BeanDefinition AbstractBeanDefinition beanDefinition = BeanDefinitionBuilder.genericBeanDefinition().getBeanDefinition(); // 当前Bean对象的类型 beanDefinition.setBeanClass(User.class); // 将BeanDefinition注册到BeanFactory中 DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory(); beanFactory.registerBeanDefinition(...... Spring | 二、Spring中核心概念详解 spring
关于beanDefinition 的第一篇笔记 一共三篇 https://blog.csdn.net/java_lyvee/article/details/102633067 beanDefinition:org.springframework.beans.factory.config.BeanDefinition 常用子类:org.springframework.beans.factory.support.GenericBeanDefinition 描述每个bean的定义,dependsOn,scope,lazy,beanClassName等 启动过程: 扫描 parse------beanDefinition object ----map<"xxx",o> validate life-------遍历beanDefinitionMap,得到beanDefinition,实例化object 容器: 由spring各个组件组成 singletonObjects : ConcurrentHashMap 单例池,容器的一部分 beanDefinitionMap bean.... Spring | (一)BeanDefinition spring