支付宝手机网站支付二维码怎么做,外贸是做什么的经营范围,高端网站建设哪家公司好,做电影网站怎么挣钱一、概述 我们知道启动IOC容器时#xff0c;Spring会为我们创建各种各样的bean#xff0c;那么思考一个问题#xff0c;bean的创建顺序是由什么决定的呢#xff1f;答#xff1a;bean的创建顺序是由BeanDefinition的注册信息决定的#xff0c;这个其实很好理解#xff0…一、概述 我们知道启动IOC容器时Spring会为我们创建各种各样的bean那么思考一个问题bean的创建顺序是由什么决定的呢答bean的创建顺序是由BeanDefinition的注册信息决定的这个其实很好理解bean创建完成的标识是循环完所有的BeanDefinition关于BeanDefinition的加载过程请参考 系列十五、BeanDefinition关于bean创建完成的标识请参考 系列十六、Spring IOC容器的扩展点 #2.4 二、BeanDefinition的注册顺序
2.1、规则 BeanDefinition的注册顺序是由注解的解析顺序决定的规则如下 Configuration Component Import(普通bean) Bean Import(xxxImportBeanDefinitionRegistrar) 2.2、案例
2.2.1、pom.xml
dependencies!--spring基本依赖--dependencygroupIdorg.springframework/groupIdartifactIdspring-aop/artifactIdversion5.2.5.RELEASE/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-beans/artifactIdversion5.2.5.RELEASE/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-context/artifactIdversion5.2.5.RELEASE/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-core/artifactIdversion5.2.5.RELEASE/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-expression/artifactIdversion5.2.5.RELEASE/version/dependency!-- 数据源 --dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion8.0.26/version/dependencydependencygroupIdcom.alibaba/groupIdartifactIddruid/artifactIdversion1.2.16/version/dependency!-- 普通maven项目中使用Sl4j注解 --dependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdversion1.18.22/version/dependencydependencygroupIdorg.slf4j/groupIdartifactIdslf4j-api/artifactIdversion1.7.32/version/dependencydependencygroupIdch.qos.logback/groupIdartifactIdlogback-classic/artifactIdversion1.2.10/version/dependency!-- aop --dependencygroupIdcglib/groupIdartifactIdcglib/artifactIdversion3.1/version/dependencydependencygroupIdaopalliance/groupIdartifactIdaopalliance/artifactIdversion1.0/version/dependencydependencygroupIdorg.aspectj/groupIdartifactIdaspectjweaver/artifactIdversion1.9.19/version/dependency!-- 工具 --dependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.13.2/versionscopetest/scope/dependencydependencygroupIdcom.alibaba/groupIdartifactIdfastjson/artifactIdversion1.2.76/version/dependencydependencygroupIdorg.apache.commons/groupIdartifactIdcommons-collections4/artifactIdversion4.3/version/dependencydependencygroupIdorg.apache.commons/groupIdartifactIdcommons-lang3/artifactIdversion3.11/version/dependencydependencygroupIdcn.hutool/groupIdartifactIdhutool-all/artifactIdversion5.7.22/version/dependencydependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-databind/artifactIdversion2.12.1/version/dependencydependencygroupIdcommons-logging/groupIdartifactIdcommons-logging/artifactIdversion1.1.1/version/dependency/dependencies
2.2.2、MySpringConfig
/*** Author : 一叶浮萍归大海* Date: 2023/11/27 14:18* Description:*/
ComponentScan(basePackages {org.star})
Configuration
Import({ComponentB.class})
EnableCustomBean
public class MySpringConfig {public MySpringConfig() {System.out.println(MySpringConfigs NoArgsConstructor was invoked!);}Beanpublic ComponentC componentC() {return new ComponentC();}}
2.2.3、ComponentA
/*** Author : 一叶浮萍归大海* Date: 2023/11/27 14:21* Description:*/
Component
public class ComponentA {public ComponentA() {System.out.println(ComponentAs NoArgsConstructor was invoked!);}}
2.2.4、ComponentB
/*** Author : 一叶浮萍归大海* Date: 2023/11/27 14:21* Description:*/
public class ComponentB {public ComponentB() {System.out.println(ComponentBs NoArgsConstructor was invoked!);}}
2.2.5、ComponentC
/*** Author : 一叶浮萍归大海* Date: 2023/11/27 14:21* Description:*/
public class ComponentC {public ComponentC() {System.out.println(ComponentCs NoArgsConstructor was invoked!);}}
2.2.6、ComponentD
/*** Author : 一叶浮萍归大海* Date: 2023/11/27 14:21* Description:*/
Data
public class ComponentD {private String name;private String description;public ComponentD() {System.out.println(ComponentDs NoArgsConstructor was invoked!);}}
2.2.7、MyImportBeanDefinitionRegistrar
/*** Author : 一叶浮萍归大海* Date: 2023/11/27 14:26* Description:*/
public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {Overridepublic void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {RootBeanDefinition beanDefinition new RootBeanDefinition();beanDefinition.setBeanClass(ComponentD.class);// 添加属性MutablePropertyValues propertyValues new MutablePropertyValues();propertyValues.add(name,ComponentD);propertyValues.add(description,组件D);beanDefinition.setPropertyValues(propertyValues);// 注入到Spring容器中registry.registerBeanDefinition(componentD,beanDefinition);}}
2.2.8、EnableCustomBean
/*** Author : 一叶浮萍归大海* Date: 2023/11/27 14:40* Description:*/
Retention(RetentionPolicy.RUNTIME)
Target(ElementType.TYPE)
Documented
Import(MyImportBeanDefinitionRegistrar.class)
public interface EnableCustomBean {}
2.2.9、SpringBeanCreateOrderMainApp
/*** Author : 一叶浮萍归大海* Date: 2023/11/27 14:33* Description:*/
public class SpringBeanCreateOrderMainApp {public static void main(String[] args) {AnnotationConfigApplicationContext context new AnnotationConfigApplicationContext(MySpringConfig.class);for (String beanDefinitionName : context.getBeanDefinitionNames()) {System.out.println(beanDefinitionName);}}}