@PostConstruct注解详解
创始人
2025-05-31 06:32:17

初始化方式一:@PostConstruct注解

假设类UserController有个成员变量UserService被@Autowired修饰,那么UserService的注入是在UserController的构造方法之后执行的。

如果想在UserController对象生成时候完成某些初始化操作,而偏偏这些初始化操作又依赖于依赖注入的对象,那么就无法在构造函数中实现(ps:spring启动时初始化异常),例如:

public class UserController {@Autowiredprivate UserService userService;public UserController() {// 调用userService的自定义初始化方法,此时userService为null,报错userService.userServiceInit();}
}

因此,可以使用@PostConstruct注解来完成初始化,@PostConstruct注解的方法将会在UserService注入完成后被自动调用。

public class UserController {@Autowiredprivate UserService userService;public UserController() {}// 初始化方法@PostConstructpublic void init(){userService.userServiceInit();}
}

总结:类初始化调用顺序:

(1)构造方法Constructor

(2)@Autowired

(3)@PostConstruct

初始化方式二:实现InitializingBean接口

除了采用注解完成初始化,也可以通过实现InitializingBean完成类的初始化

public class UserController implements InitializingBean {@Autowiredprivate UserService userService;public UserController() {}// 初始化方法@Overridepublic void afterPropertiesSet() throws Exception {userService.userServiceInit();}
}

比较常见的如SqlSessionFactoryBean,它就是通过实现InitializingBean完成初始化的。

@Override
public void afterPropertiesSet() throws Exception {// buildSqlSessionFactory()是完成初始化的核心方法,必须在构造方法调用后执行this.sqlSessionFactory = buildSqlSessionFactory(); 
}

相关内容

热门资讯

从“硬刚”到“认错”,贾国龙回... “西贝预制菜风波”发生三个多月后,西贝创始人贾国龙近日在接受媒体采访时首次对外回应。他坦言,自己连续...
牛市早报|证监会:正稳步推进商... 【市场数据】截至12月25日收盘,上证综指涨0.47%,报3959.62点;科创50指数跌0.23%...
白银狂飙141%,硅料大涨,光... 记者丨曹恩惠编辑丨骆一帆最近一周,光伏组件环节传来涨价消息。根据市场消息,隆基绿能、晶科能源等光伏组...
对于2026年,这是高盛顶级科... 经历了连续三年科技股强劲回报但也伴随着剧烈波动的行情后,随着2026年的临近,华尔街的焦点正从单纯的...