返回

Spring5源码6 -xxxAware接口回调源码剖析

后端

简介

Spring是一个强大的应用程序框架,它提供了许多有用的特性和功能,其中之一就是Aware接口回调。Aware接口回调允许bean在实例化的时候,能够感知(获取)容器中的一些组件。例如,BeanFactoryAware接口允许bean获取BeanFactory实例,而ApplicationContextAware接口允许bean获取ApplicationContext实例。

xxxAware接口回调

Spring提供了许多Aware接口,每个接口对应一种特定的组件。例如,BeanFactoryAware接口对应BeanFactory组件,而ApplicationContextAware接口对应ApplicationContext组件。下表列出了所有Aware接口及其对应的组件:

Aware接口 组件
BeanFactoryAware BeanFactory
ApplicationContextAware ApplicationContext
ServletContextAware ServletContext
HttpSessionAware HttpSession
MessageSourceAware MessageSource
ApplicationEventPublisherAware ApplicationEventPublisher

如何使用xxxAware接口回调

要使用xxxAware接口回调,您需要先实现相应的Aware接口。例如,要获取BeanFactory实例,您可以实现BeanFactoryAware接口。然后,您需要在bean的setter方法中调用setBeanFactory()方法。例如:

public class MyBean implements BeanFactoryAware {

    private BeanFactory beanFactory;

    @Override
    public void setBeanFactory(BeanFactory beanFactory) {
        this.beanFactory = beanFactory;
    }

    public void doSomething() {
        // 使用BeanFactory实例
        beanFactory.getBean("myBean");
    }
}

xxxAware接口回调的源码分析

接下来,我们来看一下xxxAware接口回调的源码。首先,我们来看看BeanFactoryAware接口的源码:

public interface BeanFactoryAware {

    void setBeanFactory(BeanFactory beanFactory);

}

BeanFactoryAware接口只有一个方法,那就是setBeanFactory()方法。这个方法的作用是将BeanFactory实例注入到bean中。

然后,我们来看看BeanFactoryAware接口的实现类BeanFactoryAwareImpl的源码:

public class BeanFactoryAwareImpl implements BeanFactoryAware {

    private BeanFactory beanFactory;

    @Override
    public void setBeanFactory(BeanFactory beanFactory) {
        this.beanFactory = beanFactory;
    }

    public void doSomething() {
        // 使用BeanFactory实例
        beanFactory.getBean("myBean");
    }
}

BeanFactoryAwareImpl类实现了BeanFactoryAware接口,并重写了setBeanFactory()方法。在setBeanFactory()方法中,我们把BeanFactory实例注入到了beanFactory属性中。然后,我们在doSomething()方法中使用了BeanFactory实例。

总结

Spring Aware接口回调是一种非常强大的机制,它允许bean在实例化的时候,能够感知(获取)容器中的一些组件。这使得我们能够在bean中使用这些组件,从而实现特定的功能。