You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring配置子类Bean时,父类Address是否会被创建为Bean?

关于Spring父类Bean创建的问题解答

嗨,作为Spring新手,这个问题其实挺典型的,我来给你掰扯清楚~

核心结论

Spring不会单独为父类Address创建Bean。你在配置文件里只声明了OfficeAddress的Bean,Spring只会实例化这个子类的Bean;而父类Address的构造方法被调用,只是Java继承机制的必然结果——创建子类对象时,Java会自动先调用父类的无参构造方法,这和Spring是否创建父类Bean是完全两回事。

验证方法

方法1:观察控制台输出

运行你的TestClasspathApplicationContext,控制台会输出:

Inside Address Constructor 
Inside OfficeAddress Constructor 
Printing all the details of office address .....

这里父类构造的输出只是Java继承的表现,并不是Spring单独创建了Address的Bean。

方法2:尝试从容器获取Address类型的Bean

修改你的main方法,添加获取AddressBean的测试代码:

public static void main(String[] args) {
    ApplicationContext context = new ClassPathXmlApplicationContext("classpathapplicationcontext.xml");
    Address offaddress = context.getBean("officeaddress", OfficeAddress.class);
    offaddress.printAllDetails();
    
    // 尝试获取Address类型的Bean
    try {
        Address addressBean = context.getBean(Address.class);
        System.out.println("成功获取到Address Bean");
    } catch (NoSuchBeanDefinitionException e) {
        System.out.println("容器中不存在Address类型的Bean:" + e.getMessage());
    }
}

运行后会抛出NoSuchBeanDefinitionException,明确告诉你容器里根本没有Address的Bean实例。

方法3:打印容器中所有Bean的名称

同样修改main方法,添加打印所有Bean定义名称的代码:

public static void main(String[] args) {
    ApplicationContext context = new ClassPathXmlApplicationContext("classpathapplicationcontext.xml");
    
    // 打印容器中所有Bean的名称
    String[] beanNames = context.getBeanDefinitionNames();
    System.out.println("容器中的Bean列表:");
    for (String name : beanNames) {
        System.out.println("- " + name);
    }
    
    Address offaddress = context.getBean("officeaddress", OfficeAddress.class);
    offaddress.printAllDetails();
}

运行后只会输出officeaddress这一个Bean名称,直接证明Spring没有创建Address的独立Bean。

补充说明

如果确实需要Spring为Address创建独立的Bean,你需要在配置文件里单独声明它:

<bean id="address" class="com.springprct.ioc.applicationcontext.classpathsystem.Address"/>

这时Spring才会把Address也作为一个独立的Bean管理起来。

内容的提问来源于stack exchange,提问作者Faysal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 15:07:36