Spring @PostConstruct 与 init-method 属性

标签 spring

在Spring XML配置中使用@PostConstruct注解和声明与init-method相同的方法有什么区别吗?

最佳答案

实际上,我认为没有任何区别,但它们的工作方式有优先级。 @PostConstructinit-method 是 BeanPostProcessors。

  1. @PostConstruct 是 JSR-250 注释,而 init-method 是 Spring 拥有初始化方法的方式。
  2. 如果您有 @PostConstruct 方法,则会在调用初始化方法之前首先调用它。
  3. 如果您的 bean 实现 InitializingBean 并覆盖 afterPropertiesSet ,则首先调用 @PostConstruct,然后调用 afterPropertiesSet,然后调用 init-method .

有关更多信息,您可以查看 Spring 的 reference documentation .

在 JSR 250 规范之前,在 xml 中使用 init-method 是首选方式,因为它将 java 类(bean)与任何 spring 特定类/注释分离。因此,如果您正在构建一个不需要依赖的库spring 基础设施 bean 则首选使用 init-method。在创建方法期间,您可以指定需要调用的方法作为初始化方法。

现在随着 Java EE 中 JSR 250 规范的引入以及 spring 对这些注解的支持,在一定程度上减少了对 spring 框架的依赖。

但我不得不承认,添加这些东西会增加代码的可读性。所以这两种方法各有利弊。

关于Spring @PostConstruct 与 init-method 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8519187/

相关文章:

java - BindingResult 和 bean 名称 '...' 的普通目标对象都不能作为请求属性

java - 如何在spring jdbc模板中制作流式sql?

java - Spring JPA/Hibernate 未更新到数据库以在保存时更改 @Entity 的 boolean 值

java - Spring hibernate : How to solve HibernateException"DefaultSchemaNameResolver requires Dialect to provide MySQL5Dialect"

java - Spring 数据 JPA : Filtering page contents results in a smaller page than requested

java - 在列表中传递多个实现

java - 无法验证提供的 CSRF token 。仅使用 xml

java - 如何在Struts 2上应用Spring Security

java - 使用 Java 或 Spring 生成 PDF

java - 从接口(interface)只创建一个 bean 实例