spring中的BeanNameAware,BeanFactoryAware这些Aware接口是做什么的?
时间: 2024-06-04 19:07:48 浏览: 17
Aware接口是一组Spring框架提供的回调接口,用于在Bean实例化后,对Bean进行一些初始化操作。具体来说,BeanNameAware接口用于让Bean获取自己在Spring容器中的名称,BeanFactoryAware接口用于让Bean获取自己所在的BeanFactory对象。这些Aware接口都是在Bean实例化后,由Spring容器自动调用的。
例如,如果一个Bean实现了BeanNameAware接口,那么在Bean实例化后,Spring容器会调用该Bean的setBeanName(String name)方法,并将该Bean在Spring容器中的名称作为参数传递给该方法。同样的,如果一个Bean实现了BeanFactoryAware接口,那么在Bean实例化后,Spring容器会调用该Bean的setBeanFactory(BeanFactory beanFactory)方法,并将该Bean所在的BeanFactory对象作为参数传递给该方法。
这些Aware接口可以为Bean提供更多的自定义功能,例如根据Bean所在的BeanFactory对象来获取其他Bean,或根据Bean的名称来做一些特殊的操作等。
相关问题
告诉我spring IOC中bean的生命周期
在 Spring IOC 容器中,Bean 的生命周期可以分为以下 8 个阶段:
1. 实例化 Bean:Spring IOC 容器会根据配置文件中的配置信息实例化 Bean。
2. 设置对象属性:在 Bean 实例化之后,Spring IOC 容器会利用 Bean 的属性 Setter 方法为 Bean 设置属性值。
3. 检查 Aware 相关接口:Spring IOC 容器会检测 Bean 是否实现了 BeanNameAware、BeanFactoryAware 或者其他的 Aware 相关接口,并将相关的实例注入到 Bean 中。
4. BeanPostProcessor 前置处理器的 before 方法:Spring IOC 容器会调用所有注册的 BeanPostProcessor 实现类的 before 方法。
5. 初始化方法:如果 Bean 实现了 InitializingBean 接口,则 Spring IOC 容器会调用 afterPropertiesSet 方法。如果 Bean 配置了 init-method,则 Spring IOC 容器会调用指定的初始化方法。
6. BeanPostProcessor 后置处理器的 after 方法:Spring IOC 容器会调用所有注册的 BeanPostProcessor 实现类的 after 方法。
7. 使用 Bean:Bean 实例化、属性填充和初始化完成后,就可以使用了。
8. 销毁方法:如果 Bean 实现了 DisposableBean 接口,则 Spring IOC 容器会在销毁 Bean 之前调用 destroy 方法。如果 Bean 配置了 destroy-method,则 Spring IOC 容器会调用指定的销毁方法。
Spring中bean的生命周期
Spring中的Bean生命周期可以分为以下几个阶段:
1. 实例化:当Spring容器启动时,会根据配置文件或注解等方式创建Bean的实例。
2. 属性赋值:在实例化后,Spring容器会根据配置文件或注解等方式为Bean的属性进行赋值。
3. Aware接口回调:一些特定的Aware接口可以被容器识别并回调相应的方法,例如BeanNameAware、BeanFactoryAware、ApplicationContextAware等。
4. 初始化:在Bean的所有属性都被赋值后,会调用Bean的初始化方法,可以通过@Bean注解、InitializingBean接口、@PostConstruct注解等方式来实现初始化方法。
5. 后处理器:在Bean的初始化方法执行完成后,Spring容器会调用一些BeanPostProcessor接口的方法,例如postProcessBeforeInitialization、postProcessAfterInitialization等,这些方法可以在Bean初始化前后进行一些处理操作。
6. 使用:经过以上几个步骤,Bean已经可以被正常使用了。
7. 销毁:当Spring容器关闭时,会调用所有Bean的销毁方法,可以通过@PreDestroy注解、DisposableBean接口等方式来实现销毁方法。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)