如何在Spring中从bean内部获取bean的id?

35 java spring javabeans

在不使用BeanPostProcessor设置字段的情况下,从bean内部(在Java代码中)检索bean id的最简单方法是什么?

我能想到的唯一方法是使用BeanPostProcessor:

public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
    ((MyBean)bean).setName(beanName);
    return bean;
}
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法不需要我写一个额外的类或知道有问题的bean的类?我尝试搜索文档和谷歌,但我不确定我需要寻找什么.

谢谢!

Dav*_*itz 50

只需实现 org.springframework.beans.factory.BeanNameAware接口,您就可以自动获取它.它有一种方法:

void setBeanName(String name)
Run Code Online (Sandbox Code Playgroud)

  • 有点遗憾的是,Spring没有为此提供注释,可以将名称直接注入bean的字段而无需接口和公共setter.哈,好吧. (3认同)
  • @skaffmann - 我认为这是因为没有一个Spring作者推荐一个类依赖于bean名称,因为这通常会导致通过ApplicationContext直接访问.这与DI的情况正好相反.如果您编写一个小弹簧扩展,如果还有一个(技术)方法,通常不会打扰. (2认同)