Java 在实例化阶段之前/期间检索bean类
在Spring应用程序中,可以使用Java 在实例化阶段之前/期间检索bean类,java,spring,spring-boot,Java,Spring,Spring Boot,在Spring应用程序中,可以使用applicationContext.getBeansOfType(Object.class)检索所有(?)bean。当然,这只有在创建了所有bean之后才可能 因此,如果我在一个Bean的构造函数中调用这个方法,我必须很幸运,能够成为最后一个被创建的Bean,能够访问所有这些Bean 据我所知,SpringBean的定义是在初始化Bean之前创建BeanDefinitions的一个阶段 如何在Bean的构造函数中检索所有创建的BeanDefinition 我
applicationContext.getBeansOfType(Object.class)
检索所有(?)bean。当然,这只有在创建了所有bean之后才可能
因此,如果我在一个Bean的构造函数中调用这个方法,我必须很幸运,能够成为最后一个被创建的Bean,能够访问所有这些Bean
据我所知,SpringBean的定义是在初始化Bean之前创建BeanDefinitions的一个阶段
- 如何在Bean的构造函数中检索所有创建的BeanDefinition
- 我还可以检索这些BeanDefinition的类型(如
类
)吗?该类型似乎只提供“此bean定义的当前bean类名”
或者是在构造完所有bean(例如,
@PostConstruct
)之后获取这些类型的唯一方法?您可以创建最后一个bean,例如,将它以最小的初始化顺序放入@Configuration
类中,以便它是具有最小初始化顺序的最后一个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";
}
}
也许这个代码能帮上忙
for (String name : applicationContext.getBeanFactory().getBeanDefinitionNames()) {
BeanDefinition beanDefinition = applicationContext.getBeanFactory().getBeanDefinition(name);
String className = beanDefinition.getBeanClassName();
Class<?> clazz = Class.forName(className);
}
for(字符串名称:applicationContext.getBeanFactory().getBeanDefinitionNames()){
BeanDefinition BeanDefinition=applicationContext.getBeanFactory().getBeanDefinition(名称);
String className=beanDefinition.getBeanClassName();
Class clazz=Class.forName(className);
}
循环获取所有的BeanDefinition
s,然后为每个BeanDefinition加载类并执行所需操作
顺便说一句,这可能不是使用Spring的好方法,但它会起作用。嗨,James,这似乎就是我一直在寻找的。你能告诉我,为什么这不是使用Spring的好方法吗?我试图做的是,通过处理所有Springbean(即所有组件扫描)上的注释来配置Bean。当然,在构造之后初始化Bean是可能的,但是我担心,有人可能会在Bean完全初始化之前尝试使用它。我不知道还有什么办法可以做到这一点。一般来说,我会说,查看bean定义可能意味着您试图绕过Spring行为,但如果这是您所需要的,那就没问题了。这个API就是用来使用的。很高兴这有帮助。