当前位置: 首页 > 知识库问答 >
问题:

依赖于其他bean实例的BeanPostProcessor(导致bean(…)不合格……)

濮献
2023-03-14

我面对的是Bean(...)没有资格被所有BeanPostProcess处理。我已经将问题缩小到@Configuration类中的@Bean方法,我认为这是罪魁祸首:

配置类

import io.micrometer.core.instrument.MeterRegistry;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.beans.factory.config.BeanPostProcessor;

@Configuration
@RequiredArgsConstructor
public class Config {

    private final MeterRegistry meterRegistry;

    @Bean
    public BeanPostProcessor classABeanPostProcessor() {
        return new BeanPostProcessor() {
            @Override
            public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
                if (bean instanceof ClassA) {
                    SomeOtherStaticClasss.doSomething(meterRegistry);
                }

                return bean;
            }
        }
    }
}

据我所知,BeanPostProcessor bean创建得相当快,需要过早地实例化MeterRegistry bean,这使得它不合格(因为BeanPostProcessor正在操作尚未注入的bean)。

我在博客上看到一篇文章,描述了一个非常类似的问题:https://blog.monosoul.dev/2021/04/02/who-stole-my-spring-boot-system-metrics/问题是,我不太理解产生“BadRestTemplateReplace”的@Bean方法是如何工作的,因为MetricsRestTemplateCustomizer(依赖于MeterRegistry Bean实例)也需要注入?

共有1个答案

薛墨一
2023-03-14

好的,我已经通过简单地使用@Lazy找到了一个解决方案(我还将类ABeanPostProcess定义提取为@Component):

    @Component
    public static class ClassABeanPostProcessor implements BeanPostProcessor {

        private final MeterRegistry meterRegistry;

        @Lazy
        public ClassABeanPostProcessor(final MeterRegistry meterRegistry) {
            this.meterRegistry = meterRegistry;
        }

        public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
            if (bean instanceof ClassA) {
                SomeOtherStaticClasss.doSomething(meterRegistry);
            }
            return bean;
        }
    }
 类似资料:
  • 我有一个@Configuration注释类,它有@Bean注释方法。它们中的大多数只返回没有DI依赖项的新实例,例如: 但是一些bean需要构造函数注入,例如。 我该怎么做?

  • 我已经玩弄了@scope注释(没有用),但我的理解是我不应该这么做。 提前感谢您提供的任何信息!:)

  • 我正在运行一个JUnit测试,嗯,我的Spring启动项目,我是这样写的: 找到依赖项[com.br.suppcomm.ocp.dao.logindao]得[com.br.suppcomm.ocp.dao.logindao]:需要至少1个具有此依赖项自动候选资格得bean.依赖项注释:{@org.SpringFramework.Beans.Factory.Annotation.AutoWired(

  • 问题内容: 我有一个发布功能,如下所示: 现在假设在某些时候对Projects进行了更改,结果是上面返回了一个不同的项目,因此Tasks.find将返回其他任务。但是,对项目所做的更改不会重新发布 任务 我已经使用了reactPublish,但事实证明该程序包存在问题(并且也没有任何单元测试)。因此,是否有一种简单的方法可以在项目更改时重新发布此发布功能? 问题答案: 通过调用安装软件包。 添加软

  • 我正在使用spring开发一个程序,我面临着这个问题,它说: 根据我的观察,问题出在我的服务/服务实施中 服务: 和我的ServiceImpl 请帮助我解决问题,并提供您的解决方案,thx提前。

  • 我已经尝试了以下问题中的解决方案,但在我的情况下都不起作用: 错误: XLSHTTPSMessageConverter: