Java 如何按名称获取Springbean
如何使用Java 如何按名称获取Springbean,java,spring,Java,Spring,如何使用BeanFactoryUtils 我在下面尝试,但这不起作用 import org.springframework.beans.factory.BeanFactoryUtils; baseDao= BeanFactoryUtils.originalBeanName("RegionDaoImpl"); RegionDao @Component public class RegionDaoImpl implements BaseDao<Region> { .
BeanFactoryUtils
我在下面尝试,但这不起作用
import org.springframework.beans.factory.BeanFactoryUtils;
baseDao= BeanFactoryUtils.originalBeanName("RegionDaoImpl");
RegionDao
@Component
public class RegionDaoImpl implements BaseDao<Region> {
...
}
@组件
公共类RegionDaoImpl实现BaseDao{
...
}
有什么建议吗?你需要一个电话,然后打电话,例如:
RegionDaoImpl-dao=BeanFactoryUtils.beanOfType(beanFactory,RegionDaoImpl.class);
通常,ListableBeanFactory
将是一个应用程序,因此您需要Spring应用程序的应用程序上下文。如何获取它取决于您的应用程序类型,以及调用beanOfType()
的代码所在的位置
通常最好让Spring自动将对象连接到类中,这样做也一样,即按类型查找bean
@组件
公共类组件{
@自动连线
私人区域行政区行政区行政区行政区行政区行政区行政区行政区行政区行政区行政区行政区行政区行政区行政区行政区行政区行政区行政区行政区行政区行政区行政区行政区行政区行政区行政区行政区行政区;
...
}
如果您想按名称查找,您可以调用,但这似乎有点多余:
RegionDaoImpl-dao=beanFactory.getBean(“RegionDaoImpl”,RegionDaoImpl.class);
bean名称是regionDaoImpl
不是regionDaoImpl
。此外,按名称获取通常不是一件明智的事情,或者首先进行查找是一个糟糕的设计。他希望通过name
获取,而不是通过`type,在这种情况下,由于基于接口的代理(可能)甚至可能失败。但是,无论如何查找(除非编写框架/库),查找都是不好的。@M.Deinum这个问题没有说明所声明的baseDao
的类型是什么,但是除非它是RegionDaoImpl
,否则您无法真正使用它。我的意思是,它可以是BaseDao
,但是您将无法访问任何特定于区域的额外方法,如果它是RegionDaoImpl
,那么最好使用beanOfType()
,因为它是类型安全的,并且可以防止输入错误。这不会与接口代理一起工作,因为该类型不是以这种方式出现的。