美文网首页美丽的爪哇岛
Spring中常见的接口和注解

Spring中常见的接口和注解

作者: begonia_rich | 来源:发表于2018-05-05 19:37 被阅读102次

    过了一遍spring-core,spring-beans,spring-context这三个包,翻了一下接口和注解,这里整理记录一下方便以后使用

    Spring的普通接口

    Environment,环境对象
    ConfigurableEnvironment,可配置的环境对象
    FactoryBean,获得自行创建Bean的能力
    ApplicationListener,声明为一个监听器
    ApplicationEventPublisher,事件发布器

    BeanFactory
    ApplicationContext
    ConfigurableApplicationContext
    ConfigurableWebApplicationContext
    这些接口都是容器对象的接口,从上到下依次继承,一般而言使用的比较多的是BeanFactory和ApplicationContext.太向下的接口没用到那么细致的功能.

    带回调的接口

    对带回调的接口进行一些简单的分类

    普通的回调接口

    InitializingBean,初始化
    DisposableBean,销毁
    SmartLifecycle,可以对bean的生命周期做一些细致的调整

    Aware相关

    BeanFactoryAware
    BeanNameAware
    ServletContextAware
    ApplicationContextAware
    ApplicationEventPublisherAware
    EnvironmentAware,
    ResourceLoaderAware
    EmbeddedValueResolverAware

    获取一些容器中的对象,名字去掉Aware就是将要在容器中获得的对象,就不写功能了.一般而言就是获得容器中对应的对象.

    PostProcessor相关

    BeanDefinitionRegistryPostProcessor,获得BeanDefinitionRegistry,此时继续调整BeanDefinitionRegistry(一般就是继续register)

    BeanFactoryPostProcessor,获得BeanFactory,此时可以进一步调整BeanFactory(此时容器实例化了获得BeanFactory并加载了BeanDefined但是Bean尚未实例化)

    BeanPostProcessor,可以获得已经完成所有配置之后的Bean,此时可以对Bean做动态代理(此时容器已经将Bean实例化)

    获得一些启动时指定时刻的回调,大部分时候是用于添加/替换/删除容器中的Bean/BeanDefined对象的.

    其他一些特别功能的接口

    通过注解@Import导入Bean到容器时一些高级特性
    ImportAware,只是获得组合注解中的参数.(1通过参数可以进一步实例化别的Bean对象,2注解参数封装成参数对象AnnotationMetadata传入到方法内(可以转成StandardAnnotationMetadata进而获取启动类都可以))

    ImportSelector,返回一组待导入的class,返回的Bean可以嵌套ImportAware和ImportBeanDefinitionRegistrar接口实现.同样有特性

    ImportBeanDefinitionRegistrar,获得注解中的参数,同时获得BeanDefinitionRegistry对象


    常见的注解

    @Bean,声名一个Bean
    @Import,加入容器,这个注解带入的Bean不一定会加入到容器中,在分类上属于@Role中的基础设施,有可能在比较早的生命周期回调.
    @Configuration,声名为配置类
    @ComponentScan,扫描路径,注意通配符
    @ImportResource,导入xml配置,classpass:
    @Primary,相同类型bean指定一个默认
    @AliasFor,对于自己定义的注解可以起别名和组合注解覆盖
    @Order,对bean的创建定义顺序
    @Autowired 根据类型注入
    @Qualifier 用于多个接口实现时配合@Autowired限定bean的name
    @Value 通过SPEL表达式获得值(可以在属性,方法,参数上)

    常见的实现类

    StandardBeanExpressionResolver,SPEL标准解析器
    GenericBeanDefinition,一般的Bean被抽象成这个对象放入Registry中
    BeanDefinitionRegistry,BeanDefinition收集器
    RuntimeBeanReference,在BeanDefined阶段的占位符对象
    GenericWebApplicationContext,一般的web容器


    总结

    其实把功能分解拆开之后看Spring似乎也没有那么"大"了

    相关文章

      网友评论

        本文标题:Spring中常见的接口和注解

        本文链接:https://www.haomeiwen.com/subject/aiuerftx.html