Spring中怎么定义Bean加载顺序
发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,这篇文章主要讲解了"Spring中怎么定义Bean加载顺序",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Spring中怎么定义Bean加载顺序"吧!S
千家信息网最后更新 2025年12月03日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安全错误
数据库的锁怎样保障安全
广西北斗守时模块服务器
联发科5g射频软件开发配置
军品软件开发计划书范文
网络安全教育平台网站
奉贤区使用网络技术参考价格
网络安全实战攻防工作汇报
关闭数据库前端页面能否打开
万德数据库是免费的么
网络安全绘画大班
四川省网络安全视频
pg数据库默认端口号
高端的重庆移动服务器租用
服务器管理系统工作原理
数据库一个单元格怎么分行
专科计算机网络技术是学什么
软件开发程序员可以入部队吗
网络安全 征文
福建省一线网络技术
初中基础差学软件开发可以吗
抖音小游戏用什么软件开发
面向物联网的三维仿真软件开发
google 图形化数据库
局域网连接服务器异常
国家udi数据库
数据库代码怎么找
网络安全暴力视频
软件开发定金比例
网络安全ted课件
cad数据库转换
高邑信息化软件开发价格走势