摘要:容器管理的一般不需要了解容器的状态和直接使用容器但是在某些情况下是需要在中直接对容器进行操作的可以通过特定的接口来完成接口有以下这些接口名描述实现了这个接口的类都可以获取到一个对象可以获取容器中的所有在中可以得到应用上下文的事件发布器从而可
容器管理的 Bean 一般不需要了解容器的状态和直接使用容器, 但是在某些情况下, 是需要在 Bean 中直接对IOC容器进行操作的, 可以通过特定的 Aware 接口来完成. aware 接口有以下这些:
接口名 | 描述 |
---|---|
ApplicationContextAware | 实现了这个接口的类都可以获取到一个 ApplicationContext 对象. 可以获取容器中的所有 Bean |
ApplicationEventPublisherAware | 在 bean 中可以得到应用上下文的事件发布器, 从而可以在Bean中发布应用上下文的事件. |
BeanClassLoaderAware | 获取 bean 的类加载器 |
BeanFactoryAware | 获取 bean 的工厂 |
BeanNameAware | 获取 bean 在容器中的名字 |
BootstrapContextAware | 获取 BootstrapContext |
LoadTimeWeaverAware | 加载Spring Bean时织入第三方模块, 如AspectJ |
MessageSourceAware | 主要用于获取国际化相关接口 |
NotificationPublisherAware | 用于获取通知发布者 |
ResourceLoaderAware | 初始化时注入ResourceLoader |
ServletConfigAware | web开发过程中获取ServletConfig |
ServletContextAware | web开发过程中获取ServletContext信息 |
这个接口比较常用, ApplicationContextAware 接口中只有一个方法, 用来获取容器中的所有 Bean.
void setApplicationContext(ApplicationContext applicationContext) throws BeansException;
@Component public class Test implements ApplicationContextAware { @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { } }
这里提供一个常用的工具类
@Component public class SpringUtil implements ApplicationContextAware { private static ApplicationContext applicationContext; @Override public void setApplicationContext( ApplicationContext applicationContext) throws BeansException { SpringUtil.applicationContext = applicationContext; } public static ApplicationContext getApplicationContext() { return applicationContext; } /** * 根据Bean名称获取实例 * * @param name * * Bean注册名称 * @return bean实例 */ @SuppressWarnings("unchecked") public staticT getBean( String name) throws BeansException { return (T) applicationContext.getBean(name); } }
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/72463.html
摘要:代码示例自定义实现注册运行和预想一样,输出结果为,如果移除掉注解的属性,输出结果为总结在大多数情况下,我们应该避免使用任何接口,除非我们需要它们。 showImg(https://segmentfault.com/img/remote/1460000019807821?w=1920&h=1080); 通过如下前序两篇文章: Spring Bean 生命周期之我从哪里来? Spring...
摘要:也是属于方法调用栈的一环,进去有类似一段伪代码这段代码通过遍历得到所有的,然后挨个执行重写的方法,倘若有一个方法返回的为,那么循环就会跳出,意味着下面的方法不会被执行。 Spring源码原理篇--容器初始化&Bean后置处理器 本篇主要是讲解IOC容器初始化过程中大体进行了哪一些工作,以及Bean后置处理器的工作原理和BeanPostProcessor在底层的使用。 环境准备 编译器...
摘要:入门篇学习总结时间年月日星期三说明本文部分内容均来自慕课网。主要的功能是日志记录,性能统计,安全控制,事务处理,异常处理等等。 《Spring入门篇》学习总结 时间:2017年1月18日星期三说明:本文部分内容均来自慕课网。@慕课网:http://www.imooc.com教学示例源码:https://github.com/zccodere/s...个人学习源码:https://git...
摘要:即,的后置处理器,它的作用就是在的初始化方法前跟后进行拦截处理。如何注册后置处理器我们暂不作分析,着重说一下,后置处理器是如何工作的。 BeanPostProcessor即,Bean的后置处理器,它的作用就是在Bean的初始化方法前跟后进行拦截处理。我们都知道,要想在Bean的初始化方法前后进行工作,那必须在Bean实例创建完成之后,init方法执行之前,后置处理器就已经在容器中了,所...
摘要:简介本篇文章是容器源码分析系列文章的最后一篇文章,本篇文章所分析的对象是方法,该方法用于对已完成属性填充的做最后的初始化工作。后置处理器是拓展点之一,通过实现后置处理器接口,我们就可以插手的初始化过程。 1. 简介 本篇文章是Spring IOC 容器源码分析系列文章的最后一篇文章,本篇文章所分析的对象是 initializeBean 方法,该方法用于对已完成属性填充的 bean 做最...
阅读 2738·2021-11-19 11:30
阅读 2994·2021-11-15 11:39
阅读 1746·2021-08-03 14:03
阅读 1951·2019-08-30 14:18
阅读 2011·2019-08-30 11:16
阅读 2099·2019-08-29 17:23
阅读 2527·2019-08-28 18:06
阅读 2499·2019-08-26 12:22