spring bean 動態創建、核心類ApplicationContext 、AutowireCapableBeanFactory

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了、只需要加載方法上

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章