Spring容器一览图


在spring容器头文件 spring容器的入口_声明周期

Caption

定制入口:

           在Spring容器启动过程中,给个性化定制容器提供了扩展入口。

    定制原始Bean:
        方式一: 不推荐使用,引起耦合,将应用代码和Spring耦合在一起了。
            实现回调接口
              InitializingBean DisposableBean

        方式二:
            配置文件指定初始化方法和销毁Bean方法,配置文件属性。
            init-method  destroy-method

        方式三:
           使用注解
           @PostConstruct @PreDestroy

        方式四:
           应用中的bean使用同一的名称命名声明周期方法,统一名称为init() initialize() destory() ,而后配置Spring容器扫描此类命名的方法,达到统一配置的目的,避免了每个Bean都配置。 即在配置文件<Beans default-init-method="init" default-destroy-method="destory">处配置。 可以在单独的<Bean init-method="doInit">覆盖统一的方法。

     这些回调方法的调用,Spring内部是使用BeanPostProccessor来实现注入调用。可以自己通过定制BeanPostProccessor来扩展自己想要的功能。         

  容器声明周期回调:
        实现Lifecycle接口,Spring容器在启动过程中,当触发到某个声明周期,他就会调用所有Lifecycle的实现,调用对应的声明周期回调方法。这里能力在Spring内部是通过LifecyleProcessor来实现的。

    容器注册shutdown Hook
         shutdownHook会调用容器shutdown钩子,实施容器销毁动作,只有注册了这个hook,一些声明周期才能执行。

    实现各种Aware接口:
        ApplicationContextAware BeanNameAware ApplicationEventPublisherAware BeanClassLoaderAware BeanFactoryAware BootstrapContextAware LoadTimeWeaverAware MessageSourceAware NotificationPublisherAware
            ResourceLoaderAware ServletConfigAware ServletContextAware 通过定制这些aware接口,可以在容器启动过程中做你想做的事情。

 定制BeanPostProcessor

          

           下图展示了容器内部的一些自带的BeanFactoryPostProcessor,可以参考他们做自己的自定义实现。

在spring容器头文件 spring容器的入口_自定义_02

 定制BeanFactoryPostProcessor

           通过实现BeanFactoryPostProcessor的回调方法,可以操控bean配置的元数据。Spring IoC容器允许BeanFactoryPostProcessor读取配置元数据,并可能在容器实例化除BeanFactoryPostProcessor实例之外的任何bean之前更改它。Spring容器上可以注册多个BeanFactoryPostProcessor,他可以是优先级,通过标识@Order注解。

          下图展示了容器内部的一些自带的BeanFactoryPostProcessor,可以参考他们做自己的自定义实现。

在spring容器头文件 spring容器的入口_在spring容器头文件_03