spring学习之Aware接口

12次阅读

共计 1132 个字符,预计需要花费 3 分钟才能阅读完成。

在日常的开发过程中,有时候我们需要用到 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());
}

运行结果如下:

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

其他 Aware 接口


BeanFactoryAware,可以获取到 BeanFactory。
BeanNameAware,可以获取到 bean 的名称。
等其他不在描述。

正文完
 0