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

SpringInitBean(工厂)后处理器可以延迟吗?

鄂和璧
2023-03-14

有人能给我解释一下吗?看了文档后,我不明白。

SpringInitBean(工厂)后处理器是否可以延迟?

https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#beans-factory-extension-factory-postprocessors

有一个这样的障碍让我困惑:

与BeanPostProcessors一样,您通常不希望为延迟初始化配置BeanFactoryPostProcessors。如果没有其他bean引用bean(工厂)后处理器,那么该后处理器将根本不会被实例化。因此,将其标记为延迟初始化将被忽略,并且Bean(工厂)后处理器将被急切地实例化,即使您在元素声明中将默认的lazy init属性设置为true也是如此。

共有1个答案

闻枫
2023-03-14

这个问题的正确答案是:“SpringInitBean(工厂)后处理器可以懒惰吗?”答案是“不”。我自己检查过了。我创建了两个类:

@Lazy
@Component
public class CustomBeanFactoryPostProcessor implements BeanFactoryPostProcessor {
    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
        System.out.println("bean factory!");
    }
}

@Lazy
@Component
public class CustomBeanPostProcessor implements BeanPostProcessor {
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("before init!");
        return bean;
    }

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        return bean;
    }
}

并运行spring应用程序。所以,在控制台中,它被打印为:“bean工厂”和多次“在init之前”,尽管我在这些类上添加了@Lazy注释。

 类似资料:
  • 如何在Vertx中处理延迟作业列表(实际上是数百个HTTP GET请求,到禁止快速请求主机的有限API)?现在,我正在使用此代码,它被阻止,因为Vertx一次启动所有请求。希望在每个请求之间有5秒的延迟来处理每个请求。

  • 我正在尝试将我的UIAlertViews更改为UIAlertController。我为它设置了这个操作: 但是,处理程序直到动作被点击大约一秒钟后才运行。有什么方法可以加快速度吗?

  • 主要内容:1.源码解析,2.常见的工厂后置处理器的实现,3.常见的BeanDefinitionRegistryPostProcessor实现类源码解析1.源码解析 工厂后置处理器的执行 AnnotationConfigApplicationContext.refresh() refresh() -> invokeBeanFactoryPostProcessors() PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors

  • 我们在RHEL 7.0 VM上部署了一个Java/spring/Tomcat应用程序,它使用AlejandRorivera/Embedded-RabbitMQ,一旦部署了war,它就启动Rabbitmq服务器,并连接到它。我们有多个队列用来处理和过滤事件。 流程如下所示: 我们接收到的事件->发布事件队列->侦听器类筛选事件->发布到另一个队列进行处理->我们发布到另一个队列进行日志记录。 问题是

  • 我有一系列应用程序使用来自SQS队列的消息。如果由于某种原因,这些消费者中的一个出现故障,并且停止使用消息,我希望得到通知。做这件事最好的方法是什么? 请注意,其中一些队列每2-3天只能将一条消息放入队列,因此等待队列中的消息数触发通知对我来说不是一个好的选择。 我正在寻找的是可以监视一个SQS队列并说“这个消息已经在这里一个小时了,什么都没有处理它……让某人知道。”

  • top看到单个CPU 100%时,就是垂直扩展的时候了。如果需要让CPU使用率最大化,可以配置Redis实例数对应CPU数, Redis实例数对应端口数(8核Cpu, 8个实例, 8个端口), 以提高并发。单机测试时, 单条数据在200字节, 测试的结果为8~9万tps。(未实测)。 另外,对于命令的复杂度一定要关注。