如何用Java配置覆盖springbean
我在试图覆盖SpringZuul中定义的RibbonRoutingFilter bean时遇到了这个问题。强调一下,我正在做一个覆盖,而不仅仅是创建一个相同类型的bean。最后,我希望zuul的“ribbonRoutingFilter”bean根本没有注册
所以我有自己的实现。首先,我尝试使用@component注释并自动关联依赖项。在构造函数中添加了一个断点,结果它从未被调用过。所以我意识到我的定义必须比zuul的更早加载。所以我用@configuration annotation和@Order(Ordered.HIGHEST_PRECEDENCE)
创建了一个配置类,并使用@Bean annotation在那里实例化我的类。不过,我的方法总是更早加载
# 1 楼答案
事实证明,Spring在加载配置类定义时遵循一定的顺序,这就是重写发生的地方。班级组织。springframework。上下文注释。ConfigurationClassParser在方法doProcessConfigurationClass()中有详细的逻辑。我将把我的简化摘要或排序规则放在这里:
这解释了为什么我的超控无效。这是因为我一直在尝试的都是第二步。但是zuul通过@Import定义了bean,这是第3步
所以为了解决我的问题,我在应用程序类中添加了一个@Bean注释方法,并按照预期进行实例化和重写
上面的总结可能并不准确,它只是让您了解哪些内容可能会使您的覆盖失败。在尝试特定用例时,最好调试ConfigurationClassParser