ApplicationContextAware 实现与应用。
ApplicationContext
Spring 容器是生成Bean实例的工厂,并管理容器中的 Bean 。生活中我们一般会把生产产品的地方称为工厂,而在这里 bean 对象的地方官方取名为 BeanFactory ,直译 Bean 工厂(com.springframework.beans.factory.BeanFactory ),我们一般称 BeanFactory 为 IoC 容器,而称 ApplicationContext 为应用上下文。
BeanFactory 提供了 OC 容器最基本的形式,给具体的IOC容器的实现提供了规范,BeanFactory 负责配置、创建、管理 Bean 等基本功能
ApplicationContext 的中文意思是“应用前后关系”,它继承自 BeanFactory 接口,除了包含 BeanFactory 的所有功能之外,在国际化支持、资源访问(如URL和文件)、事件传播等方面进行了良好的支持,被推荐为 Java EE 应用之首选,可应用在 Java APP 与 Java Web 中。
ApplicationContextAware
实现 ApplicationContextAware 接口之后,系统启动时就可以自动给我们的服务注入 applicationContext 对象(自动调用了接口中的 setApplicationContext 方法),我们就可以获取到 ApplicationContext 里的所有信息了。
ps: 在 Spring 框架中,如果一个类实现了 org.springframework.context.ApplicationContextAware 接口,那么 Spring 容器在实例化这个类的时候会自动调用其 setApplicationContext 方法,从而将 Spring 的 ApplicationContext 对象传递给该类,以便在类中访问应用程序上下文中的 bean。
当 Spring 容器检测到一个类实现了这个接口,它会在实例化该类之后,调用 setApplicationContext 方法,将应用程序上下文作为参数传递给这个方法。
这个机制允许你在 Spring 托管的组件中获得对 Spring 容器的引用,从而可以访问和操作容器中的其他 bean。这在某些情况下非常有用,例如,你可能需要在自定义组件中访问其他 bean,或者对应用程序上下文进行一些特定的操作。
总之,Spring 通过自动调用 setApplicationContext 方法,允许你方便地获取对应用程序上下文的引用。这是 Spring IoC(控制反转)和依赖注入的一个示例,它使得你的组件能够以松散耦合的方式与 Spring 容器协作。
注意:实现ApplicationContextAware接口的类需要交给spring管理,使用 @Component 或者在配置文件声明 bean
我们获取 ApplicationContext ,一般是用来获取 bean 的,ApplicationContext 有一个 getBean 方法,此方法继承自 BeanFactory
1 | T getBean(Class requiredType) throws BeansException; |
代码实现
1 | package com.cbi.rpmc.bean; |
使用场景
如果我们在 spring boot 中直接 new 出来的话,是进不了 IOC 里面的,但是,通过上面进行获取的是 IOC 里面的实例。
具体可以看