init-method属性用于指定Bean初始化时自动调用的无参void方法,需在XML中配置,如<bean init-method="init"/>;该方法在依赖注入完成后执行,是InitializingBean和@PostConstruct的XML替代方案。

在 Spring 的 XML 配置中,init-method 属性用于指定 Bean 实例化后、被注入依赖之后自动调用的初始化方法。该方法必须是无参、返回值为 void 的公共(public)实例方法。
基本写法(XML 配置)
在 <bean> 标签中通过 init-method 指定方法名:
<property name="userRepository" ref="userRepository"/>
</bean>
此时 Spring 会在 UserService 实例创建完成、所有属性注入完毕后,自动调用其 init() 方法。
对应 Java 类中的初始化方法要求
- 方法名必须与
init-method属性值完全一致(区分大小写) - 必须是 public 访问级别
- 不能有参数(无参)
- 返回类型必须是
void - 不能是 static 方法
例如:
立即学习“Java免费学习笔记(深入)”;
private UserRepository userRepository;
public void setRepository(UserRepository userRepository) {
this.userRepository = userRepository;
}
public void init() {
System.out.println("UserService 初始化完成");
// 可在此处加载缓存、校验配置等
}
}
替代方案:实现 InitializingBean 接口
除了 XML 配置,也可让类实现 org.springframework.beans.factory.InitializingBean 接口,并重写 afterPropertiesSet() 方法:
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("通过 InitializingBean 初始化");
}
}
这种方式无需 XML 配置 init-method,但会将代码与 Spring API 耦合。
@PostConstruct 注解(推荐用于注解驱动)
在基于注解的配置(如 @Component + @Configuration)中,更常用的是 @PostConstruct:
public class UserService {
@PostConstruct
public void init() {
System.out.println("使用 @PostConstruct 初始化");
}
}
该注解由 JSR-250 定义,Spring 支持,且不依赖 Spring 特定接口,耦合度更低。


















