Spring bean定义 - 获取bean类

时间:2014-01-29 15:32:44

标签: spring web-applications spring-bean

我正在尝试获取Bean类名而不初始化bean。 我需要知道这个类,我可以从applicationContext获取bean并从bean实例中检查类名,但我想知道实际创建/初始化bean的类。 有可能吗?

 Object bean = applicationContext.getBean("beanName");
 bean.getClass();

2 个答案:

答案 0 :(得分:2)

创建ApplicationContext后无法执行此操作。大多数ApplicationContext实现将refresh()自己并强制实例化bean。

您可以创建一个BeanFactoryPostProcessor来获取目标bean定义并检查bean类。

@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
    String className = beanFactory.getBeanDefinition("").getBeanClassName();
}

但请注意,作为getBeanClassName()状态的javadoc

  

因此,不要在运行时将其视为最终的bean类型   而只是在单个bean上使用它进行解析   定义级别。

所以用一粒盐就可以了。


如果您向我们提供有关您要完成的更多详细信息,可能会有其他选择。

答案 1 :(得分:1)

Sotirious提供的代码不适用于具有父bean的bean以及使用Java Config或使用@Component注释定义的bean(以及@Service之类的类似annotati,{{1 },@Repository)。

只是一个扩展,检查它是@Component还是bean有父:

AnnotatedBeanDefinition

请注意,在使用工厂方法的情况下,此方法不起作用。正如Java Doc所说:

  

此外,这可能只是调用工厂方法的类,或者在工厂bean引用调用方法时甚至可能为空。因此,认为这在运行时是最终的bean类型,而是仅在单个bean定义级别用于解析目的。