Обновление
Если вы работаете с Spring Boot, вы можете запустить свое приложение следующим образом и получить бин следующим образом.
ApplicationContext ctx = SpringApplication.run(Main.class, args);
DispatcherServlet servlet = (DispatcherServlet)ctx.getBean("dispatcherServlet");
Вы можете перечислитьвсе bean-компоненты с:
ctx.getBeanDefinitionNames()
Обратите внимание, что большинство из них просто названы как имя класса с первой буквой в нижнем регистре (для вас будет принят «stringToBooleanConverter»).У некоторых есть имя пакета впереди и затем это.Вы можете легко проверить это в отладчике:).
Вы можете найти bean-компонент определенного типа класса, как этот (обратите внимание, что это определение возвращает ноль в моем случае; так что эта зависимость, кажется, нев моем заявлении):
ctx.getBean(StringToBooleanConverter.class)
Вы можете удалить компонент с помощью:
((AnnotationConfigEmbeddedWebApplicationContext)
ctx).removeBeanDefinition("yourBeanName")
Исходное предложение
Это связано в связанном вопросездесь: https://stackoverflow.com/a/12447211/857994. реалистично, вы просто хотите удалить существующий компонент.
Вы можете получить ссылку на фабрику компонентов и удалить старый компонент из нее вручную.Я думаю, что наиболее прямым методом, вероятно, будет тот, который предлагается в комментарии: "Just implement BeanFactoryAware and then cast BeanFactory with DefaultListableBeanFactory"
.
Я не верю, что существует способ остановить предоставление компонента в первую очередь, так как он приходитот самой весны.Вы можете аннотировать свои собственные bean-компоненты, чтобы избежать автоматического подключения, хотя я не знаю, как вы могли бы добиться этого на бобе, предоставляемом пружиной.