转载

spring学习之Aware接口

在日常的开发过程中,有时候我们需要用到 getBean 的方法,此时,我们想要用ApplicationContext来调用这个方法,那这个ApplicationContext是怎么获取到的呢?

ApplicationContextAware

ApplicationContextAware继承了Aware接口,同时定义了setApplicationContext方法。下面我们看看怎么通过ApplicationContextAware接口获取这个ApplicationContext。

MyApplicationContext

public class MyApplicationContext implements ApplicationContextAware {
    ApplicationContext applicationContext;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        this.applicationContext = applicationContext;
    }

    public ApplicationContext getApplicationContext() {
        return applicationContext;
    }
}

MyConfig

@Configuration
public class MyConfig {
    @Bean
    public MyApplicationContext myApplicationContext() {
        return new MyApplicationContext();
    }
}

测试代码

@Test
public void test(){
    ApplicationContext app = new AnnotationConfigApplicationContext(MyConfig.class);
    MyApplicationContext myApplicationContext =app.getBean("myApplicationContext",MyApplicationContext.class);
    System.out.println(app);
    System.out.println(myApplicationContext.getApplicationContext());
}

运行结果如下:

spring学习之Aware接口

两次打印的地址是一样的,所以我们获取到的ApplicationContext是正确的。

其他Aware接口

spring学习之Aware接口

BeanFactoryAware,可以获取到BeanFactory。

BeanNameAware,可以获取到bean的名称。

等其他不在描述。

原文  https://segmentfault.com/a/1190000020704406
正文到此结束
Loading...