当前位置: 首页 > 面试题库 >

Spring @PostConstruct与init-method属性

邹英光
2023-03-14
问题内容

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


问题答案:

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

  1. @PostConstruct是JSR-250注释,而init-methodSpring是具有初始化方法的方法。
  2. 如果有@PostConstruct方法,将在调用初始化方法之前先调用此方法。
  3. 如果你的bean实现的InitializingBean和覆盖afterPropertiesSet,首先@PostConstruct被调用,然后afterPropertiesSet再init-method

有关更多信息,你可以查看Spring的参考文档。

在JSR 250规范之前,在xml中使用init-method是首选方式,因为它可以将Java类(bean)与任何特定于Spring的类/注释分离。因此,如果你要构建不需要依赖Spring基础结构bean的库,那么在创建方法期间,你可以指定需要称为初始化方法的方法。

现在,随着Java EE中的JSR 250规范的引入和这些注释的Spring支持,对Spring框架的依赖性已在一定程度上降低了。

但是我不得不承认,添加这些东西可以提高代码的可读性,因此两种方法都有其优缺点。



 类似资料:
  • 我是spring新手,我使用https://start.spring.io/创建了一个新的Spring Boot项目,没有进一步的依赖关系,解压缩了zip文件,并在IntelliJ idea中打开了项目。我没有做任何进一步的配置。我现在试图用@PostConstruct方法设置bean&然而,Spring从来没有调用过该方法。 这些是我的课: SpringTestApplication.java

  • 我希望在一个配置类中有多个@PostConstruct注释方法,应该依赖于@Profile调用这些方法。您可以想象这样一段代码: 然而,根据@PostConstruct的javadoc,我只能用这个注释对一个方法进行注释。在Spring的Jira https://Jira.spring.io/browse/spr-12433中有一个开放的改进。 你是如何解决这个需求的?我总是可以将这个配置类拆分为

  • 我有一个关于spring beans初始化的问题。当我们通过init方法填充bean属性时,scneario是什么。看看下面给出的代码片段。这里我通过init方法填充超类bean属性列表。 1) 超级类Bean: 2)豆子2: 3) Spring上下文xml: 4) 输出:名为Super list2子列表的Super init::0 我的问题是当超级类被容器初始化时,调用init()。在这个方法中

  • 当我使用@PostConstruct或InitializingBean.AfterPropertiesSet时,initMethodName为空。因此,这些都不是XML配置(init-method=“some”)的确切替代方案。 我想知道这种微小的不一致背后的原因。以及在Java中设置init-method的方法。

  • 问题内容: SampleBean: 和配置文件是这样的: 而且我没有在bean标记上设置default-init-method属性。 任何机构都可以说出为什么@PostConstruct方法没有被调用的原因。 问题答案: 你需要(或)启用处理功能。