我正在尝试获取Bean类名而不初始化bean。 我需要知道这个类,我可以从applicationContext获取bean并从bean实例中检查类名,但我想知道实际创建/初始化bean的类。 有可能吗?
Object bean = applicationContext.getBean("beanName");
bean.getClass();
答案 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定义级别用于解析目的。