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

在实例化阶段之前/期间检索Bean类

乜明朗
2023-03-14

在Spring应用程序中,可以检索所有(?)带有applicationContext的bean。getBeansOfType(Object.class)。当然,这只有在创建了所有bean之后才有可能。

所以,如果我在Bean的构造函数中调用这个方法,我必须很幸运,成为最后一个被创建的Bean,能够访问所有的Bean。

就我对SpringBean生命周期的理解而言,在初始化Bean之前,有一个创建BeanDefinitions的阶段。

  • 如何在Bean的构造函数中检索所有已创建的Bean定义?
  • 我还可以检索这些Bean定义的类型(作为Class)吗?Bean定义类型似乎只提供了这个bean定义的当前bean类名。

或者,在构建完所有bean之后(例如,@PostConstruct),获得这些类型的唯一方法是什么?

共有2个答案

仰欣悦
2023-03-14

您可以创建最后一个bean,例如将它放在具有最小初始化顺序的@Configance类中,这样它就成为具有@order(订购。LOWEST_PRECEDENCE)的最后一个bean,这就是:

@Configuration
@Order(Ordered.LOWEST_PRECEDENCE)
public class Last {

    @Autowired
    ApplicationContext applicationContext;

    @Bean
    public String lastBean() {

        applicationContext.getBeanDefinitionNames();    //retrive all created BeanDefinitions in the constructor of a Bean

        applicationContext.getBeansOfType(Object.class); //retrive the types (as Class) 

        return "lastBean";
    }

}
陈允晨
2023-03-14

也许这段代码能帮上忙

    for (String name : applicationContext.getBeanFactory().getBeanDefinitionNames()) {
        BeanDefinition beanDefinition = applicationContext.getBeanFactory().getBeanDefinition(name);
        String className = beanDefinition.getBeanClassName();
        Class<?> clazz = Class.forName(className);
    }

循环获取所有的BeanDefinitions,然后为每个BeanDefinition加载类,然后做你想做的事情?

顺便说一句,这可能不是使用Spring的好方法,但它会起作用。

 类似资料:
  • 我配置了一些插件目标,以便在构建生命周期(maven android应用程序)的某些阶段执行。但是我认为我在配置插件的过程中犯了一个错误,我想确保他们真的调用了。我找到了这个命令,它将打印所有生命周期阶段和目标:,但它没有显示我配置的目标。因此我有两个请求: > 命令是否显示我在pom标记中配置的目标? 如何确保在阶段中调用目标和在构建生命周期中调用的阶段?

  • 问题内容: 全部, 我有一个带有称为时间戳记的列的MYSQL表。它的数据类型为“ 10/1/2009 3:25:08 PM”,“ 10/1/2009 3:30:05 PM”,“ 10/4/2009 3:40:01 PM”,等等.. 我想编写一个SQL查询来选择在两个日期之间出现的时间戳字段中的所有值。 userInput日期将没有时间部分。您能为此建议正确的MySQL查询语法吗?谢谢 问题答案:

  • 在JavaFX中,我使用stage1从一个阶段切换到另一个阶段。隐藏();第二阶段。show(); 然而,第二阶段相当大,包含了一大堆元素。所以当我显示()它时,当它第一次弹出时,有一段400毫秒的时间,整个阶段是空的和灰色的。然后所有的元素都出现了。 太难看了。这是在i7上,有一个非常好的图形处理器。 我已经注意到,如果我展示它,然后隐藏它,然后再次展示它,最终的节目从它出现在屏幕上的那一刻起就

  • 我想从我的控制器类中处理阶段事件(即隐藏)。所以我所要做的就是添加一个这样的侦听器: 但问题是初始化在该代码之后立即开始: 在此代码之前: 因此,getScene返回null。 我自己找到的唯一解决方法是将侦听器添加到,当它变得不为空时,我得到场景,将我最终检索阶段的侦听器处理添加到它的中。这一切都以将所需的侦听器设置为阶段事件而结束。 我觉得听众太多了。 这是解决我问题的唯一方法吗?

  • 杰克逊v1。9.13 spring 3.2.0嗨,我花了好几天的时间试图弄清楚如何在序列化期间从bean向JSON中添加字段。 这似乎是一个非常基本的功能,但我每走一条路都会碰到橡胶墙。 我想要实现的是: 示例bean: 输出: 我认为最简单的方法是扩展BeanSerializer,编写“_type”属性,并委托剩余字段的超类序列化。问题是,方法的可访问性和一些关键方法的“最终”条款使其陷入困境。

  • 本次开发需要安装一个Python的游戏模块:pygame。 方式:pip install pygame 开发步骤如下: 1.18.1 创建游戏主页面窗口,并添加滚动背景。 # -*- coding:utf-8 -*- import pygame from pygame.locals import * #pygame使用的各种常量 import time # 创建游戏主页面窗口,并添加滚动背景。