Spring容器一览图
![](https://i-blog.csdnimg.cn/blog_migrate/7c8c16fe925f445cfb1ef3f3ca697da3.png)
定制入口:
在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
通过实现BeanPostProcessor的回调方法,你可以提供自己的Bean的实例化逻辑,依赖解析逻辑,等等。如果您希望在Spring容器完成实例化、配置和初始化bean之后实现一些自定义逻辑。您可以插入一个或多个自定义BeanPostProcessor实现。
下图展示了容器内部的一些自带的BeanFactoryPostProcessor,可以参考他们做自己的自定义实现。
定制BeanFactoryPostProcessor
通过实现BeanFactoryPostProcessor的回调方法,可以操控bean配置的元数据。Spring IoC容器允许BeanFactoryPostProcessor读取配置元数据,并可能在容器实例化除BeanFactoryPostProcessor实例之外的任何bean之前更改它。Spring容器上可以注册多个BeanFactoryPostProcessor,他可以是优先级,通过标识@Order注解。
下图展示了容器内部的一些自带的BeanFactoryPostProcessor,可以参考他们做自己的自定义实现。