【问题标题】:how to set default beans init-method by annotations in spring 4?spring 4中如何通过注释设置默认bean init-method?
【发布时间】:2015-04-28 23:08:15
【问题描述】:

我正在通过 Java 注释学习使用 Spring 4,并且我找不到如何为属于特定配置的所有 bean 设置默认 init-method,而无需添加 @PostContruct 注释以在所有类中初始化方法并且既不制作它们实现 InitializeBean 接口...我只想做这样的事情:

<beans default-init-method="init">

    <bean id="blogService" class="com.foo.DefaultBlogService">
    </bean>

    <bean id="anotherBean" class="com.foo.AnotherBean">
    </bean>

</beans>

所以,我想通过 Java 注释来做到这一点,我想在 bean 的配置容器上设置默认的 bean 配置。那可能吗?问候

编辑:我真正想要做的是告诉 spring 默认情况下在我在 BeansConfigurations 类中创建的所有 bean 上运行“初始化”方法。这意味着,放置一些注释或其他东西来确定所有包含的 bean 将默认运行此初始化方法。但正如我之前所说,我不想接触 bean 类,我的意思是,我不想为每个 bean 类的每个初始化方法添加 @PostConstructor 注释,我不希望每个 bean 都实现 InitializeBean 接口要么

【问题讨论】:

  • 您可以查看BeanPostProcessor,但您能再解释一下您的用例吗?也许还有其他方法可以达到相同的结果
  • 我刚刚编辑了更多信息。谢谢!

标签: java spring dependency-injection annotations spring-4


【解决方案1】:

您可以执行以下操作:

@Configuration
public class SomeConfig {

   @Bean(initMethod = "initMethodName")
   public SomeBeanClass someBeanClass() {
      return new SomeBeanClass();
   }
}

您可以对每个要调用 initMethodName 的 bean 重复此操作。

你可以更进一步,实现meta-annotationlike

@Bean(initMethod = "initMethodNAme")
public @interface MyBean {
}

只需在SomeConfig 中使用@MyBean 而不是@Bean(initMethod = "initMethodName")

【讨论】:

  • 谢谢!我不敢相信我没有在文档中看到这一点。但是,通过这种方式,我必须在“SomeConfig”中的每个 bean 上实现 initMethod 名称(使用您的示例)。你知道是否存在某种方式来将 initMethod 指定为整个配置?
  • 欢迎您!我发布的是我能想到的最简单的方法。您可能可以使用某种BeanPostProcessor 和反射,但这会涉及更多。但是,如果您使用我在回答中显示的元注释,则无需为每个 bean 指定 initMethod。只需将@Bean 替换为@MyBean 即可完成
【解决方案2】:

如果我正确理解了您的问题,您希望每个 bean 都运行它的 init 方法(如果有的话),而无需在配置文件中声明所有这些方法。我认为您自己的帖子已经有了答案,它是default-init-method="init"。在要初始化的 bean 类中,在每个类中实现 public void init() 方法。它们都会在应用程序启动时被调用。

【讨论】:

  • 我认为您没有完全正确理解他的问题。他不想通过default-init-method="init" 使用基于XML 的配置。他想使用基于注释的等价物,例如@DefaultInit("init"),据我所知不存在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-11
  • 1970-01-01
  • 2014-08-11
  • 1970-01-01
  • 2017-11-19
相关资源
最近更新 更多