BeanNameAware和BeanFactoryAware

Kan*_*ngh 19 java spring

有什么用的BeanNameAwareBeanFactoryAware?我正在研究spring并遇到了这两个接口.我用谷歌搜索了他们但没有任何用处.请告诉我什么是BeanNameAwareBeanFactoryAware接口的功能以及何时使用它们?

nic*_*ild 26

xxxAware接口是Spring框架内使用的公共模式.它们通常用于setXxx在Spring引导时为Spring托管bean提供一个对象(通过interfaces 方法).

Springs文档说明了这个Aware界面,这是你提到的两个界面的超级界面:

标记超级接口,指示bean有资格通过回调样式方法由Spring容器通知特定框架对象.

正如Sotirious指出的那样,Aware界面具有监听器,回调或观察者设计模式的感觉.

用法如下所示:

@Component
public MyBean implements BeanFactoryAware {
    private BeanFactory beanFactory;

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

    public void myMethod() {
        //I can now use beanFactory here
    }
}
Run Code Online (Sandbox Code Playgroud)

在引导期间,Spring将检查每个bean以确定它是否实现了任何xxxAware接口.当找到一个时,它会调用接口方法,提供要求的信息.在上面的例子中,Spring调用MyBean#setBeanFactory提供它BeanFactory.

当然,在许多情况下,使用这些接口并不是完全必要的.例如,所述ApplicationContextAware接口可以通过简单地被规避@Autowired荷兰国际集团的ApplicationContext成豆.

@Component
public class MyOtherBean {
    @Autowired
    private ApplicationContext applicationContext;

    public void someMethod() {
        //I can use the ApplicationContext here.
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 一个`Aware`对象是某个事件的`Observer`,`Listener`,`Callback`.您的答案很棒,只需更容易找到更多关键字.+1 (4认同)