spring bean 动态创建、核心类ApplicationContext 、AutowireCapableBeanFactory

本文详细探讨了Spring框架中如何动态创建Bean以及核心类ApplicationContext和AutowireCapableBeanFactory的使用。特别指出,即使Bean1为static,也需要通过非static的setBean1方法配合@Autowired注解进行注入,而非在字段上直接使用Autowired。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class SpringBeanUtil implements ApplicationContextAware {

    @Autowired
    private static ApplicationContext context = null;

    private Bean1 bean1;
    private Bean2 bean2;

    public void setApplicationContext(ApplicationContext context) throws BeansException {
        SpringBeanUtil.context = context;
        // bean1 = context.getBean(Bean1.class);
        // bean2 = context.getBean(Bean2.class);
        bean1 = context.getAutowireCapableBeanFactory().createBean(Bean1.class);
//      bean2 = context.getAutowireCapableBeanFactory().createBean(Bean2.class);

//      bean2 = (Bean2) context.getAutowireCapableBeanFactory().createBean(Bean2.class, AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE, true);

//      context.getAutowireCapableBeanFactory().autowireBean(bean1);
//      context.getAutowireCapableBeanFactory().autowireBeanProperties(bean2, AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE, true);
    }

public class Bean2 {

    @Autowired
    private Bean1 bean1;

    public Bean2() {
        System.out.println("bean2 创建");
    }

    public void testBean1IsNull() {
        System.out.println("检测bean1是否被赋值  bean1 == " + bean1);
    }
}

bean2中的字段也会被注入。

这里需要注意的是,如果bean1是static的 ,需要添加一个
@Autowired
public void setBean1(…)的**非**static方法,否则无法注入
字段就不需要加Autowired了、只需要加载方法上

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值