当您开始使用Spring的自动代理之类的东西时,经常会遇到这种行为,如记录所示:
实现BeanPostProcessor接口的类是特殊的,因此容器对它们的处理方式有所不同。作为ApplicationContext特殊启动阶段的一部分,将在启动时实例化所有BeanPostProcessor及其直接引用的Bean,然后所有这些BeanPostProcessor将以排序的方式进行注册-
并应用于所有其他Bean。由于AOP自动代理是作为BeanPostProcessor本身实现的,因此没有BeanPostProcessor或直接引用的bean都可以进行自动代理(因此不会有“编织”的方面)。对于任何这样的bean,您应该看到一条信息日志消息:“ Bean’foo’不适合所有BeanPostProcessor处理(例如:不适合自动代理)”。
换句话说,如果我编写了自己的BeanPostProcessor,并且该类直接在上下文中引用了其他Bean,则这些被引用的Bean将不符合自动代理的资格,并且会记录一条消息以达到这种效果。
我的问题是,很难找到直接引用的位置,因为“直接引用”实际上可能是一系列传递依赖关系,最终导致应用程序上下文中的bean数量减少了一半。Spring所提供的只是一条信息消息,除了告诉您何时在此引用网络中捕获了bean之外,并没有什么帮助。
我正在开发的BeanPostProcessor确实具有对其他bean的直接引用,但是它的引用集非常有限。尽管如此,根据日志消息,我上下文中几乎所有的bean都被排除在自动代理之外,但是我看不到这种依赖发生在哪里。
有没有人找到更好的方法来追踪这种情况?
只是为了解决这个问题,未初始化的对象图的崩溃是由于BeanPostProcessor
使用@Autowired
来获取其依赖关系而导致的,而自动装配机制有效地导致了所有其他bean定义都被初始化,直到我BeanPostProcessor
有机会在其中发表意见。物。解决方案是不要对BPP使用自动装配。
我试图找出是否有可能创建Java动态代理来自动关闭自动关闭资源,而不必记住用try资源块嵌入这些资源。 例如,我有一个JedisPool,它有一个getResource方法,可以这样使用: 现在我做了这样的事情: 现在,每次我在Jedis(JedisCommands)上调用method时,这个方法都会被传递给代理,代理从池中获取一个新的客户端,执行这个方法并将这个资源返回到池中。 它工作得很好,但
本文向大家介绍Spring Boot 自动配置原理是什么?相关面试题,主要包含被问及Spring Boot 自动配置原理是什么?时的应答技巧和注意事项,需要的朋友参考一下 注解 @EnableAutoConfiguration, @Configuration, @ConditionalOnClass 就是自动配置的核心, @EnableAutoConfiguration 给容器导入META-INF
我读过这段文档: RabbitMQ自动连接/拓扑恢复 自Spring AMQP的第一个版本以来,该框架在代理失败的情况下提供了自己的连接和通道恢复。此外,如第3.1.10节“配置代理”所述,RabbitAdmin将在重新建立连接时重新声明任何基础结构bean(队列等)。因此,它不依赖amqp客户端库现在提供的自动恢复。Spring AMQP现在使用4.0。amqp客户端的x版本,默认情况下已启用自
我试图将spring批处理过程的输出发送到RabbitMQ。为了避免对Rabbitmq的硬依赖,我使用了spring集成,如spring xd中是否有API来写入消息总线?。在我决定通过Spring自动连接或实例化bean之前,我将消息推送到RabbitMQ,一切都很好。 testService只是方法sendMessage的接口。 spring批处理作业有一个itemWriter,它使用网关be
主要内容:1.SpringBoot自动装配原理,2.BeanFactory和ApplicationContext的区别,3.Spring容器是什么1.SpringBoot自动装配原理 BFPP:BeanFactoryPostProcessor BPP:BeanPostProcessor BDRPP:BeanDefinitionRegistryPostProsessor 1.当启动SpringBoot程序时候,创建SpringApplication的对象,在对象的构造方法中进行对某些参数的初始化工
本文向大家介绍Mybatis mapper动态代理的原理解析,包括了Mybatis mapper动态代理的原理解析的使用技巧和注意事项,需要的朋友参考一下 前言 在开始动态代理的原理讲解以前,我们先看一下集成mybatis以后dao层不使用动态代理以及使用动态代理的两种实现方式,通过对比我们自己实现dao层接口以及mybatis动态代理可以更加直观的展现出mybatis动态代理替我们所做的工作,有