如何让特定的Spring Bean 在系统加载Bean之前加载

我们在工作的是可能会遇到要将特定的bean 提前加载来满足其他bean对该bean 的依赖,那么该怎么做呢,可以使用@Order 的方法来进行排序加载,可是这种方法有局限性也是常踩的坑,@Order这个注解只能工资相同bean类型的bean加载的顺序

@Order(1)
@Component
class Bean1 implements BeanA{}

@Order(2)
@Component
class Bean2 implements BeanA{}

像是以上代码的这种Bean1是先于Bean2 加载的

但是!!!!!

一下代码就有问题了

@Order(1)
@Component
class Bean1 implements BeanA{}

@Order(2)
@Component
class Bean2 implements BeanB{}

他们两个bean根本就不是同一个类型的做不到加载顺序的排序

我们可以通过实现 BeanFactoryPostProcessor 该接口重写postProcessBeanFactory 方法来进行提前bean的加载

代码:

这是三个Bean

在Bean1中进行重写

package com.lagom.springboottest;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.stereotype.Component;

/**
 * Author: lagom
 * DateTime: 2024/10/14 12:17
 **/
@Component
public class Bean1 implements BeanFactoryPostProcessor {
	@Override
	public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
		Bean2 bean = beanFactory.getBean(Bean2.class);
		System.out.println(bean);
	}
}

在Bean1中加载Bean2 也就是说Bean是提前加载的Bean

package com.lagom.springboottest;

import org.springframework.stereotype.Component;

/**
 * Author: lagom
 * DateTime: 2024/10/14 12:17
 **/
@Component
public class Bean2 {
	public Bean2(){
		System.out.println("Bean2");
	}

	@Override
	public String toString() {
		return "Bean2 toString Method";
	}
}

然后又写了一个Bean3来让系统加载

package com.lagom.springboottest;

import org.springframework.stereotype.Component;

/**
 * Author: lagom
 * DateTime: 2024/10/14 12:27
 **/
@Component
public class Bean3 {
	public Bean3()
	{
		System.out.println("Bean3");
	}
}

按照逻辑应该是先加载Bean2 再加载Bean3 ,启动验证一下

少年辛苦终身事,莫向光阴惰寸功

ok,大家加油

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值