Spring中经常使用的那些接口

Spring的核心就是Bean管理,关于Bean定义了不少可扩展性的接口,经过这些扩展接口能够实现不少功能。spring

好比动态建立bean,延迟动态建立bean,动态注入bean,动态修改bean等等。框架

下面介绍Spring中一些经常使用的接口:ui

Bean管理

BeanFactory和ApplicationContext是Spring中最核心的接口,先放一张核心类图:
imagespa

BeanFactory

这是Spring中最核心的接口,也是根接口。定义了获取bean及bean基础属性的相关方法。此接口须要从新实现的场景很是少,通常是Spring内部配置,程序中注入/获取使用便可。code

经常使用方法:继承

  • getBean 根据beanId/beanClass获取Bean
  • containsBean bean是否已加载
  • isSingleton 是不是单例
  • isTypeMatch 类型是否匹配
  • getType 获取bean class
  • getAliases 获取bean别名

ApplicationContext

继承了如下接口:
ApplicationEventPublisher, BeanFactory, EnvironmentCapable, HierarchicalBeanFactory, ListableBeanFactory, MessageSource, ResourceLoader, ResourcePatternResolver
同时也实现了以上接口的全部功能,程序中经过此接口就可使用以上接口的功能。接口

经常使用方法:生命周期

  • getId 获取spring容器ID
  • getApplicationName 获取应用明
  • getDisplayName 获取displayName
  • getStartupDate 获取启动时间
  • getAutowireCapableBeanFactory 获取autowire的beanFactory

Aware接口

Aware:adj. 意识到的。在程序中通常表明自动发现(我的理解),在Spring中的功能就是自动注入。
Spring定义了一批Aware接口,被Spring管理的Bean只须要实现XXAware接口,就能够获取相对应的资源。下面是一些经常使用的Aware接口极其做用:事件

  • BeanNameAware's setBeanName
  • BeanClassLoaderAware's setBeanClassLoader
  • BeanFactoryAware's setBeanFactory
  • EnvironmentAware's setEnvironment
  • EmbeddedValueResolverAware's setEmbeddedValueResolver
  • ResourceLoaderAware's setResourceLoader
  • ApplicationEventPublisherAware's setApplicationEventPublisher
  • MessageSourceAware's setMessageSource
  • ApplicationContextAware's setApplicationContext
  • ServletContextAware's setServletContext (仅适用于Spring Web环境下)

Bean生命周期

FactoryBean(建立Bean)

若是一个Bean实现了此接口,那么该Bean将不直接做为最终Bean的实例,而是把实现的getObject方法返回做为最终的实例。资源

此接口在框架内部大量使用,例如AOP ProxyFactoryBean或JndiObjectFactoryBean,它也能够用于定制组件。Dubbo中也经过此接口来实现动态加载生产者,具体参考com.alibaba.dubbo.config.spring.ReferenceBean

InitializingBean(初始化Bean)

若是Bean实现了此接口,在Bean建立完成以后会调用afterPropertiesSet方法,程序能够经过此接口方法作一些初始化相关的工做。

BeanPostProcessor(后置处理Bean)

Factory Hook,容许自定义修改新的Bean实例。执行顺序在afterPropertiesSet以后。
能够经过此接口实现动态/依赖配置Bean的功能,例如Dubbo中消费者经过@Reference引用生产者,具体参考com.alibaba.dubbo.config.spring.beans.factory.annotation.ReferenceAnnotationBeanPostProcessor

DisposableBean(销毁Bean)

当Spring容器关闭时会进行全部Bean的销毁,若Bean实现了此接口,则销毁时会调用destroy方法。程序能够经过此接口完成一些依赖关闭的功能。

其余

Environment

当前应用正在运行环境的接口,经过此接口能够得到配置文件和属性。该接口还继承了PropertyResolver,能够获取placeholder中的属性值。
经常使用方法

  • getActiveProfiles 获取当前激活的环境
  • getDefaultProfiles 获取当前默认环境
  • acceptsProfiles 检测环境是否处于激活状态
  • containsProperty 是否包含属性key
  • getProperty 根据key获取属性
  • getRequiredProperty 根据key获取属性,若值不存在则抛出IllegalStateException
  • resolvePlaceholders 处理el表达式,并获取对应值。例如:传入${spring.profiles.active},就能够获取对应值。跟getProperty不一样的是,getProperty须要的是具体key名称,而不是表达式。
  • resolveRequiredPlaceholders 同resolvePlaceholders,不过值不存在会抛出IllegalStateException

Lifecycle

Spring容器的生命周期接口,Bean实现此接口后能够收到Spring生命周期变化的调用。
经常使用方法:

  • start 启动事件
  • stop 中止事件
  • isStarted 判断是否启动
相关文章
相关标签/搜索