spring如何控制bean的初始化顺序

号外号外:麻烦点击左侧我正在参加博客之星评选,请您投票,给个五星好评,谢谢大家了!!!

1:写在前面

在工作中经常有这样的需求,希望某个spring bean初始化之前其他的某个spring bean已经完成初始化,我们可以称之为依赖,目前据我所知有两种方式完成这种需求,第一种就是,将被依赖的bean作为依赖bean的构造函数的参数,第二种方式就是通过spring提供的depend-on,下面我们分别来看下这两种方式。

2:构造函数

2.1:定义被依赖的类

public class ByConstructorClsA {
    public ByConstructorClsA() {
        System.out.println("ByConstructorClsA.ByConstructorClsA 被依赖类初始化了。。。");
    }
}

2.2:定义依赖类

注意在构造函数中使用2.1:定义被依赖的类中定义的类作为构造函数参数。

public class ByConstructorClsB {
    private ByConstructorClsA byConstructorClsA;

    public ByConstructorClsB(ByConstructorClsA byConstructorClsA) {
        this.byConstructorClsA = byConstructorClsA;
        System.out.println("ByConstructorClsB.ByConstructorClsB 依赖类初始化了。。。");
    }
}

2.3:测试类

@Test
public void testBeanInitOrderByConstructorParam() {
    ClassPathXmlApplicationContext ac
            = new ClassPathXmlApplicationContext("testbyconstructorparam.xml");
    ac.getBean("byConstructorClsB");
}

运行:

ByConstructorClsA.ByConstructorClsA 被依赖类初始化了。。。
ByConstructorClsB.ByConstructorClsB 依赖类初始化了。。。

Process finished with exit code 0

3:depend-on

3.1:定义被依赖的类

public class DependOnClassA {
    public DependOnClassA() {
        System.out.println("DependOnClassA.DependOnClassA 通过depend-on 依赖的类初始化了。。。");
    }
}

3.2:定义依赖的类

public class DependOnClassB {
    public DependOnClassB() {
        System.out.println("DependOnClassB.DependOnClassB 配置了depend-on的类初始化了。。。");
    }
}

3.3:xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="dependOnClassA" class="yudaosourcecode.dependon.DependOnClassA"/>
    <bean id="dependOnClassB" class="yudaosourcecode.dependon.DependOnClassB" depends-on="dependOnClassA"/>
</beans>

3.4:测试类

@Test
public void testBeanInitOrderByDependOn() {
    ClassPathXmlApplicationContext ac
            = new ClassPathXmlApplicationContext("testbydependon.xml");
    ac.getBean("dependOnClassB");
}

运行:

DependOnClassA.DependOnClassA 通过depend-on 依赖的类初始化了。。。
DependOnClassB.DependOnClassB 配置了depend-on的类初始化了。。。

Process finished with exit code 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值