spring 默认的初始化与销毁方法配置方式
1、在开发过程中,若未使用 Spring 提供的 InitializingBean 和 DisposableBean 接口来实现生命周期回调,通常会自行定义一些具有语义意义的方法,如 init()、initialize()、cleanup() 或 destroy() 等。为提升代码可读性与长期可维护性,建议在项目范围内对这类生命周期方法的命名进行统一约定。团队成员共同遵守一致的命名规范,有助于降低协作理解成本,增强整体代码风格的一致性,同时规避因随意命名引发的潜在逻辑疏漏或配置遗漏问题。

2、Spring 容器支持全局配置默认的初始化与销毁方法名称,从而实现自动识别并调用各 Bean 中同名的生命周期方法。例如,只需将初始化方法统一命名为 init(),并在容器配置中启用该默认规则,那么所有具备该方法的 Bean 在实例化及属性注入完成后,便会由容器自动触发执行,无需逐个在 <bean></bean> 标签中重复声明 init-method="init"。这种方式显著简化了 XML 配置,也更利于全项目范围内的生命周期行为标准化管理,提升开发效率与配置健壮性。

3、假设初始化方法命名为 init(),销毁方法命名为 destroy(),则对应 Java 类的结构大致如下所示,其中已包含必要的初始化准备与资源释放逻辑。

4、随后可在如下形式的 bean 定义中引用该类。
5、通过在根级 <beans></beans> 元素中设置 default-init-method 属性,即可让 Spring IoC 容器将指定名称的方法自动识别为初始化回调入口。只要某 Bean 的类中存在该方法,容器便会在其完成依赖注入后、正式投入使用前,适时调用该方法,从而实现集中式初始化流程控制,避免在每个 bean 定义中单独配置 init-method。
6、同理,在 XML 配置中也可通过为 <beans></beans> 元素设置 default-destroy-method 属性,统一指定销毁阶段所调用的方法名,达成与初始化机制对称的统一管理能力。
7、当已有 Bean 类中已存在符合默认命名约定的初始化或销毁方法时,仍可通过 <bean></bean> 标签中的 init-method 和 destroy-method 属性显式指定具体方法名,以覆盖全局默认配置,灵活适配特殊场景下的自定义生命周期行为,而不必受限于默认命名规则。
8、Spring 容器保证在完成所有依赖注入之后,立即执行配置好的初始化方法。此时操作的对象是原始的 Bean 实例,尚未经过 AOP 代理处理——即拦截器链在此阶段尚未织入。完整的 Bean 对象先被构造并装配完毕,之后容器才基于它生成带有增强逻辑的代理对象。若目标 Bean 与其代理在配置层面是解耦的,则业务代码可能绕过代理直接访问原始实例。因此,若尝试将 AOP 拦截器应用于初始化方法(如 @PostConstruct 或 init-method),将导致行为不可控、语义不一致等问题。为保障生命周期逻辑清晰、执行结果可预期,应确保初始化过程始终运行于未经代理修饰的目标对象之上,而 AOP 增强仅应用于后续的常规业务方法调用。











