Spring AutowireCapableBeanFactory

Spring AutowireCapableBeanFactory接口的使用小结:


Spring的ioc容器中有一个接口叫AutowireCapableBeanFactory,我们从名字中可以看出,具有自动装配Bean的能力。

而且这里笔者先透露下,不是所有的Bean都是被Spring容器所管理的。

但是,出于某些需求,不在Spring容器中的某些bean也希望能够引用Spring容器里的bean。

平时我们的做法可以是一个在Spring容器里的类,实现一个ApplicationContextAware接口获取ApplicationContext接口上下文对象,通过getBean的方式,获取到Spring容器里的bean。

今天我们换一种方法。就是今天要说的。AutowireCapableBeanFactory接口。


ApplicationContext上下文可以通过

getAutowireCapableBeanFactory()
方法暴露给程序员AutowireCapableBeanFactory接口的实现类。

我们通过一个实际的可运行的例子来给读者一个直观的感受吧

package com.by.application.uc.account.service.impl;

import com.by.application.uc.account.service.CzService;
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;

import javax.annotation.Resource;

public class Hello {

    @Resource
    private CzService czService;

    public void sayHello(AutowireCapableBeanFactory autowireCapableBeanFactory , CzService beanInSpringContainer) {
        if (null != autowireCapableBeanFactory) {
            autowireCapableBeanFactory.autowireBeanProperties(this, AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE, false);

            System.out.println(czService == beanInSpringContainer);
            System.out.println(czService.getClass().getName());
            System.out.println(beanInSpringContainer.getClass().getName());

            System.out.println("查看下是否自动装配" + czService);

        }
    }

}

我们可以看到类Hello不在Spring容器里面,但是却使用了@Resource注解注入SpringBean。

如果sayHello()方法不是如下实现,就会报空指针了。

 autowireCapableBeanFactory.autowireBeanProperties(this, AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE, false);
运行下,可以发现,实现了我们的目的。


你可能感兴趣的:(Java)