Spring加载Bean的顺序

在某次操作中,我想给组件加载时添加一点功能,这个应该在无参构造器中实现,但我去调用其中一个属性时却报了空指针异常。很诧异,这个属性已经使用自动注入注解了,他怎么能是个空呢?

做个测试
在Application.yml配置文件中先给一个初始值
sal:
empNo: 100

测试类如下,是用MyBatis-plus生成的

@Data
@EqualsAndHashCode(callSuper = false)
@TableName("sal")
@ConfigurationProperties(prefix = "sal")
@Component
public class Sal implements Serializable {

    private static final long serialVersionUID = 1L;

    private Integer empNo;

    private BigDecimal sal;

    public Sal(){
        System.out.println(empNo+"-------------");
    }


}

的确,在控制台我确实得到了null---------
那看来是先加载对象在注入属性咯

后来我发现,确实如此
这是Field类中的set方法源码

 @CallerSensitive
	/*第一个参数是反射目标的实例,第二个是要设置的值
	也就是说在调用此方法前我必须拥有一个该目标的实例才能为其中
	的属性赋值,逻辑上说的通,属性在反射的目标类中,所以我得先确定是哪个实例才能对其中的属性赋值*/
    public void set(Object obj, Object value)
        throws IllegalArgumentException, IllegalAccessException
    {
        if (!override) {
            if (!Reflection.quickCheckMemberAccess(clazz, modifiers)) {
                Class<?> caller = Reflection.getCallerClass();
                checkAccess(caller, clazz, obj, modifiers);
            }
        }
        getFieldAccessor(obj).set(obj, value);
    }

本文仅代表个人理解,有误的地方请各位看官指出(你说了我也不听)
牛哔
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值