Spring Boot 父类自动注入属性

原因是我在一个开源项目中看到一个类,类上面没有使用 Spring 的注解,但是里面确使用了 @Autowired,起初我以为是通过 AutowireCapableBeanFactory 去另外注入的,后面发现这个类只被另外一个类所继承,不过子类有被注入 Spring。

于是,我想 Spring 对于这个子类,是不是也会自动帮他把父类里面的属性进行注入,因为父类的方法是公共的,要是属性不注入那就无法使用了。

测试:

@Component
public class CSource {
    public void test(){
        System.out.println("大鱼");
    }
}
public class ConfigParent {

    @Autowired
    private CSource cSource;

    public void test(){
        cSource.test();
    }

}
@Configuration
public class Config extends ConfigParent{


}

结果:

    @Autowired
    private Config config;

    @Test
    void contextLoads() {
        // 输出结果:大鱼
        config.test();
    }

结果就是会帮忙自动注入属性,那 Spring 肯定是通过反射拿到了 父类的属性。当然,子类是无法拿到父类的私有属性的,但是子类可以拿到父类,所以可以通过递归的方式先拿父类。

void printAllDeclaredFields(Class<?> clazz) {
        if (clazz == null) {
            return;
        }

        // 打印当前类的所有声明字段
        Field[] fields = clazz.getDeclaredFields();
        for (Field field : fields) {
            System.out.println(field);
        }

        // 递归调用以打印父类的字段
        printAllDeclaredFields(clazz.getSuperclass());
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值