Spring Bean的优先加载方法怎么实现
发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,这篇文章主要介绍"Spring Bean的优先加载方法怎么实现",在日常操作中,相信很多人在Spring Bean的优先加载方法怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希
千家信息网最后更新 2025年12月03日Spring Bean的优先加载方法怎么实现
这篇文章主要介绍"Spring Bean的优先加载方法怎么实现",在日常操作中,相信很多人在Spring Bean的优先加载方法怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Spring Bean的优先加载方法怎么实现"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
在日常的业务开发中,绝大多数我们都是不关注 bean 的加载顺序,然而如果在某些场景下,当我们希望某个 bean 优于其他的 bean 被实例化时,往往并没有我们想象中的那么简单。
启动类指定方式
在实际的 SpringBoot 开发中,我们知道都会有一个启动类,如果希望某个类被优先加载,一个成本最低的简单实现,就是在启动类里添加上依赖
@SpringBootApplicationpublicclass Application { // 使用构造方法的方式来优先加载DemoBean public Application(DemoBean demoBean) { demoBean.print(); } public static void main(String[] args) { SpringApplication.run(Application.class); }}请注意上面的构造方法,如果我们希望在应用启动之前,demoBean就已经被加载了,那就让 Application 强制依赖它,所以再 Application 的 bean 初始化之前,肯定会优先实例化demoBeanInstantiationAwareBeanPostProcessorAdapter方式
借助InstantiationAwareBeanPostProcessorAdapter来实现在 bean 实例化之前优先加载目标 bean。
publicclass ClientBeanProcessor extends InstantiationAwareBeanPostProcessorAdapter implements BeanFactoryAware { private ConfigurableListableBeanFactory beanFactory; @Override public void setBeanFactory(BeanFactory beanFactory) { if (!(beanFactory instanceof ConfigurableListableBeanFactory)) { thrownew IllegalArgumentException( "AutowiredAnnotationBeanPostProcessor requires a ConfigurableListableBeanFactory: ">上面的实现比较简单,借助beanFactory#getBean来手动触发 bean 的实例,通过实现BeanFactoryAware接口来获取BeanFactory,因为实现InstantiationAwareBeanPostProcessor接口的类会优先于 Bean 被实例,以此来间接的达到我们的目的
接下来的问题就是如何让它生效了,我们这里使用 Import 注解来实现
@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@Import({ClientAutoConfiguration.class, ClientBeanProcessor.class})public@interface EnableOrderClient {}package com.spring.master.spring.bean.initbean;import lombok.Getter;import org.springframework.core.env.Environment;import javax.annotation.PostConstruct;/** * @author Huan Lee * @version 1.0 * @date 2020-09-25 11:58 * @describtion 业精于勤,荒于嬉;行成于思,毁于随。 */public class DatasourceLoader { @Getter private String mode; public DatasourceLoader(Environment environment) { this.mode = environment.getProperty("config.save.mode"); System.out.println("init DatasourceLoader for:" + mode); } @PostConstruct public void loadResourcres() { System.out.println("开始初始化资源"); }}package com.spring.master.spring.bean.initbean;import org.springframework.stereotype.Component;/** * @author Huan Lee * @version 1.0 * @date 2020-09-25 12:01 * @describtion 业精于勤,荒于嬉;行成于思,毁于随。 */@Componentpublic class DemoBean { public DemoBean() { System.out.println("demo bean init!"); } public void print() { System.out.println("print demo bean "); }}package com.spring.master.spring.bean.initbean;import org.springframework.context.annotation.Import;import java.lang.annotation.*;/** * @author Huan Lee * @version 1.0 * @date 2020-09-25 11:59 * @describtion 业精于勤,荒于嬉;行成于思,毁于随。 */@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@Import({ClientAutoConfiguration.class, ClientBeanProcessor.class})public @interface EnableOrderClient {}package com.spring.master;import com.spring.master.spring.bean.initbean.DemoBean;import com.spring.master.spring.bean.initbean.EnableOrderClient;import com.spring.master.spring.bean.lifecycle.Person;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;@EnableOrderClient@SpringBootApplicationpublic class SpringMasterApplication { public SpringMasterApplication(DemoBean demoBean) { demoBean.print(); } public static void main(String[] args) { SpringApplication.run(SpringMasterApplication.class, args); }}启动服务输出:init DatasourceLoader for:null开始初始化资源com.spring.master.spring.bean.initbean.DatasourceLoader@458342d3demo bean init!print demo bean到此,关于"Spring Bean的优先加载方法怎么实现"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
方法
实例
学习
业精于勤
行成于思
方式
接下来
就是
接口
更多
资源
问题
面的
帮助
开发
实用
最低
业务
场景
实际
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
无锡江苏服务器供应商家
数据库表变更升级
云电脑手机软件开发
手表打电话显示无法连接服务器
命令行了解oracle数据库
多服务器如何连接
手机编程软件开发
国际网络安全周活动开展情况
国家网络安全宣传周郑州
初中毕业能学软件开发吗
大连市网络安全宣传
象棋软件开发商
net 软件开发招聘西安
广电网络安全竞赛题库
手机软件开发公司经营范围
泾县自动化软件开发服务厂家供应
云服务器供应商能看到顾客源码
软件开发遵循的法律法规
空岛战争服务器下载
陕师大中国近现代史的数据库
163代理服务器
国产三维设计软件开发
联想服务器键盘
url表示数据库资源
serv服务器怎么传文件
软件开发入职培训流程图
阿里云服务器发票能重开吗
宣威市网络安全
服务器反应缓慢应该更换的是什么
私有云服务器安全吗