资讯专栏INFORMATION COLUMN

Spring Aware接口

why_rookie / 1034人阅读

摘要:容器管理的一般不需要了解容器的状态和直接使用容器但是在某些情况下是需要在中直接对容器进行操作的可以通过特定的接口来完成接口有以下这些接口名描述实现了这个接口的类都可以获取到一个对象可以获取容器中的所有在中可以得到应用上下文的事件发布器从而可

容器管理的 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 接口

这个接口比较常用, 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 static  T getBean(
        String name) throws BeansException {
        return (T) applicationContext.getBean(name);
    }

}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/72463.html

相关文章

  • Spring Aware 到底是什么?

    摘要:代码示例自定义实现注册运行和预想一样,输出结果为,如果移除掉注解的属性,输出结果为总结在大多数情况下,我们应该避免使用任何接口,除非我们需要它们。 showImg(https://segmentfault.com/img/remote/1460000019807821?w=1920&h=1080); 通过如下前序两篇文章: Spring Bean 生命周期之我从哪里来? Spring...

    mingzhong 评论0 收藏0
  • Spring源码原理篇(一)

    摘要:也是属于方法调用栈的一环,进去有类似一段伪代码这段代码通过遍历得到所有的,然后挨个执行重写的方法,倘若有一个方法返回的为,那么循环就会跳出,意味着下面的方法不会被执行。 Spring源码原理篇--容器初始化&Bean后置处理器 本篇主要是讲解IOC容器初始化过程中大体进行了哪一些工作,以及Bean后置处理器的工作原理和BeanPostProcessor在底层的使用。 环境准备 编译器...

    Acceml 评论0 收藏0
  • 慕课网_《Spring入门篇》学习总结

    摘要:入门篇学习总结时间年月日星期三说明本文部分内容均来自慕课网。主要的功能是日志记录,性能统计,安全控制,事务处理,异常处理等等。 《Spring入门篇》学习总结 时间:2017年1月18日星期三说明:本文部分内容均来自慕课网。@慕课网:http://www.imooc.com教学示例源码:https://github.com/zccodere/s...个人学习源码:https://git...

    Ververica 评论0 收藏0
  • Spring源码分析:BeanPostProcessor原理

    摘要:即,的后置处理器,它的作用就是在的初始化方法前跟后进行拦截处理。如何注册后置处理器我们暂不作分析,着重说一下,后置处理器是如何工作的。 BeanPostProcessor即,Bean的后置处理器,它的作用就是在Bean的初始化方法前跟后进行拦截处理。我们都知道,要想在Bean的初始化方法前后进行工作,那必须在Bean实例创建完成之后,init方法执行之前,后置处理器就已经在容器中了,所...

    jackwang 评论0 收藏0
  • Spring IOC 容器源码分析 - 余下的初始化工作

    摘要:简介本篇文章是容器源码分析系列文章的最后一篇文章,本篇文章所分析的对象是方法,该方法用于对已完成属性填充的做最后的初始化工作。后置处理器是拓展点之一,通过实现后置处理器接口,我们就可以插手的初始化过程。 1. 简介 本篇文章是Spring IOC 容器源码分析系列文章的最后一篇文章,本篇文章所分析的对象是 initializeBean 方法,该方法用于对已完成属性填充的 bean 做最...

    Alfred 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<