2015-02-10 39 views
3

我使用的是Spring Boot,很大程度上只是使用大多数组件的自动配置选项。然而,我发现了一些我只想要与Beans稍有不同行为的例子。自定义自动配置的Spring Boot Bean

什么是最好的/建议的方法来做到这一点?在很多情况下,我不想为了更改bean上的一个属性而关闭autoconfig,所以希望有一些方法可以明智地更新bean属性?

我的情况是DispatcherServlet - 我很高兴与autoconfig,但我只是想改变我的DispatcherServlet所以DispatchOptionsRequest设置为true。我希望我不需要关闭autoconfig并在本地复制配置,只是为了调用setter方法?

+0

供参考:我提交[PR](https://github.com/spring-projects/spring-boot/pull/4300),以使通过属性此配置。当Spring Boot 1.3.0发布时,它应该可用。 – 2015-11-10 14:52:40

回答

3

可以通过声明一个名为dispatcherServletDispatcherServlet类型的bean来配置调度程序servlet,然后返回一个按您的喜好配置的实例。这将覆盖先前的声明。

实施例:

@Bean 
public DispatcherServlet dispatcherServlet() { 
    DispatcherServlet servlet = new DispatcherServlet(); 
    servlet.setDispatchOptionsRequest(true); 
    return servlet; 
} 
+1

酷 - 所以只需通过命名与Spring自动配置中定义的bean相同的bean,它将始终覆盖它?如果我将这种方法用于其他豆类,我是否应该知道有什么事情?还是春季启动保证这种行为? – rhinds 2015-02-10 16:03:03

+0

@rhinds这几乎是大多数自动配置的工作原理。 Spring Boot参考文档非常值得一读。 – chrylis 2015-02-10 17:56:03

+0

@chrylis我已阅读大部分文档,但没有看到这一点 - 看到的东西重新:禁用autoconfig和各种条件..注释 - 但这些情况都没有在这里相关(尽管它很长!只是错过了这一点:)。此外,如果您看到autoConfig类的链接源代码 - DispatcherServlet bean方法实际上用于同一个静态内部类中的另一个bean(DispatcherServletRegistration)的初始化 - 将会很有趣,看看如何使用我的方法重写Bean方法? – rhinds 2015-02-10 18:22:57

相关问题