Spring Bean生命周期回调:为何实现InitializingBean会与Spring耦合?
实现InitializingBean接口导致的“与Spring耦合”具体含义
这里的耦合指的是业务代码和Spring框架的绑定程度过高,具体体现在以下几点:
- 强依赖Spring专属API:你的Bean类必须导入Spring的
InitializingBean接口,并且实现它的afterPropertiesSet()方法。这就导致代码脱离Spring容器就没法正常编译、运行——如果想把这个类用到非Spring环境(比如纯Java项目、其他IoC容器),必须删掉所有和Spring相关的代码,否则会出现依赖缺失的错误。 - 初始化逻辑绑定Spring生命周期:
afterPropertiesSet()的执行完全由Spring容器管控,它是Spring Bean生命周期的专属环节。类的初始化逻辑和Spring的容器流程绑死了,没法把这段初始化逻辑复用给普通Java对象或者其他容器管理的对象。 - 测试复杂度提升:要测试这个Bean的初始化逻辑,必须启动Spring容器或者模拟Spring的调用逻辑,没法像测试普通Java类那样直接实例化后验证。而
@PostConstruct是JSR-250的标准注解,很多容器都支持,甚至可以手动触发这个方法,测试起来灵活得多。
用@PostConstruct的好处在于它是Java标准规范的一部分,不依赖Spring专属API,你的Bean可以在任何支持该规范的环境中运行,代码通用性更强,和Spring的绑定关系更弱。
内容的提问来源于stack exchange,提问作者Shivam...
相关产品推荐
相关产品推荐

