Spring中怎么定义Bean加载顺序
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要讲解了"Spring中怎么定义Bean加载顺序",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Spring中怎么定义Bean加载顺序"吧!S
千家信息网最后更新 2026年11月01日Spring中怎么定义Bean加载顺序
这篇文章主要讲解了"Spring中怎么定义Bean加载顺序",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Spring中怎么定义Bean加载顺序"吧!
Spring容器载入bean顺序是不确定的,Spring框架没有约定特定顺序逻辑规范。但Spring保证如果A依赖B(如beanA中有@Autowired B的变量),那么B将先于A被加载。
逻辑判断
在业务层自己控制A,B的初始化顺序
构造方法依赖
@Componentpublicclass DemoA { private String name = "demo A"; public DemoA(DemoB demoB) { System.out.println(name); }}@Componentpublicclass DemoB { private String name = "demo B"; public CDemoB() { System.out.println(name); }}这个时候构造A的时候就会先去构造B使用@DependsOn
Spring 中的@DependsOn可以保证被依赖的bean先于当前bean被容器创建
@DependsOn注解可以定义在类和方法上,意思是我这个组件要依赖于另一个组件,也就是说被依赖的组件会比该组件先注册到IOC容器中。
类上使用注解:package com.spring.master.spring;import org.springframework.stereotype.Component;/** * @author Huan Lee * @version 1.0 * @date 2020-09-22 15:55 * @describtion 业精于勤,荒于嬉;行成于思,毁于随。 */@Componentpublic class EventSource { public EventSource(){ System.out.println("事件源创建"); }}package com.spring.master.spring.dependson;import org.springframework.stereotype.Component;/** * @author Huan Lee * @version 1.0 * @date 2020-09-22 15:56 * @describtion 业精于勤,荒于嬉;行成于思,毁于随。 */@Componentpublic class EventListener { public EventListener(){ System.out.println("监听器创建"); }}package com.spring.master.spring.dependson;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Configuration;/** * @author Huan Lee * @version 1.0 * @date 2020-09-22 15:57 * @describtion 业精于勤,荒于嬉;行成于思,毁于随。 */@Configuration@ComponentScan(basePackages = "com.spring.master.spring")public class SpringConfig {}启动服务:事件源创建监听器创建备注:Spring默认扫描包时会根据文件在文件夹的位置先后顺序扫描加载********************************************************************************************使用@DependsOn注解:package com.spring.master.spring;import org.springframework.context.annotation.DependsOn;import org.springframework.stereotype.Component;/** * @author Huan Lee * @version 1.0 * @date 2020-09-22 15:55 * @describtion 业精于勤,荒于嬉;行成于思,毁于随。 */@Component@DependsOn(value = {"eventListener"})public class EventSource { public EventSource(){ System.out.println("事件源创建"); }}启动服务:监听器创建事件源创建方法上使用注解:package com.spring.master.spring;import org.springframework.context.annotation.DependsOn;import org.springframework.stereotype.Component;/** * @author Huan Lee * @version 1.0 * @date 2020-09-22 15:55 * @describtion 业精于勤,荒于嬉;行成于思,毁于随。 *///@Component//@DependsOn(value = {"eventListener"})public class EventSource { public EventSource(){ System.out.println("事件源创建"); }}package com.spring.master.spring.dependson;import org.springframework.stereotype.Component;/** * @author Huan Lee * @version 1.0 * @date 2020-09-22 15:56 * @describtion 业精于勤,荒于嬉;行成于思,毁于随。 *///@Componentpublic class EventListener { public EventListener(){ System.out.println("监听器创建"); }}package com.spring.master.spring.dependson;import com.spring.master.spring.EventSource;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.DependsOn;/** * @author Huan Lee * @version 1.0 * @date 2020-09-22 15:57 * @describtion 业精于勤,荒于嬉;行成于思,毁于随。 */@Configuration@ComponentScan(basePackages = "com.spring.master.spring")public class SpringConfig { @Bean @DependsOn(value = {"eventListener"}) public EventSource eventSource(){ return new EventSource(); } @Bean public EventListener eventListener(){ return new EventListener(); }}启动服务输出:监听器创建事件源创建BeanFactoryPostProcessor
容器加载bean之前:BeanFactoryPostProcessor 可以允许我们在容器加载任何bean之前修改应用上下文中的BeanDefinition
在本例中,就可以把A的初始化逻辑放在一个 BeanFactoryPostProcessor 中。@Componentpublic class ABeanFactoryPostProcessor implements BeanFactoryPostProcessor { @Override public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException { A.initA(); }}这种方式把A中的初始化逻辑放到了加载bean之前,很适合加载系统全局配置,但是这种方式中初始化逻辑不能依赖bean的状态。BeanPostProcessor
@Componentpublicclass HDemo1 { private String name = "h demo 1"; public HDemo1() { System.out.println(name); }}@Componentpublicclass HDemo2 { private String name = "h demo 2"; public HDemo2() { System.out.println(name); }}@Componentpublicclass DemoBeanPostProcessor extends InstantiationAwareBeanPostProcessorAdapter implements BeanFactoryAware { private ConfigurableListableBeanFactory beanFactory; @Override public void setBeanFactory(BeanFactory beanFactory) { if (!(beanFactory instanceof ConfigurableListableBeanFactory)) { thrownew IllegalArgumentException( "AutowiredAnnotationBeanPostProcessor requires a ConfigurableListableBeanFactory: ">请将目标集中在postProcessBeforeInstantiation,这个方法在某个 bean 的实例化之前,会被调用,这就给了我们控制 bean 加载顺序的机会。
感谢各位的阅读,以上就是"Spring中怎么定义Bean加载顺序"的内容了,经过本文的学习后,相信大家对Spring中怎么定义Bean加载顺序这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
顺序
业精于勤
行成于思
事件
容器
监听器
逻辑
监听
方法
注解
组件
学习
服务
内容
文件
方式
时候
保证
控制
上下
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
广州紫鲸互联网科技有限公司
江苏根荣互联网科技
科技与互联网
今日互联网科技
厦门中拓互联网络科技有限公司
互联网通讯科技
关于新基建和互联网科技
麻工互联网科技
润盈互联网科技
互联网科技论坛
互联网科技类展会
盛创互联网科技有限公司
互联网和黑科技的看法
互联网金融科技展
世界互联网领先科技成果获奖
本届互联网大会上的黑科技
半导体行业属于互联网高科技类吗
南京一网一红互联网科技有限公司
中国新注册互联网科技
同城互联网络科技
广州淘业互联网络科技
科技制造互联网公司
互联网科技生活的内容
互联网实体化科技化
江苏苏星互联网科技有限公司
互联网科技接地气
兰石爱特工业互联网科技分公司
互联网时代高科技布局
数字互联网科技有限公司
株洲百竞科技的互联网营销顾问