Spring Injection - 接口和类

时间:2010-03-01 12:00:26

标签: java spring

我希望能够在我的类中调用Interfaces,但是让spring在实例中使用正确的实现类来实例化它们。

即。通常你可以这样做:

IClass clz = new Class();

我希望在方法的中间优先使用行IClass clz;(如果无法完成,则将其作为属性之一),其中clz被实例化为Spring所需的类。

我想这样做的原因是因为我希望能够通过编辑上下文文件来改变我想要使用的实现。

更好的是,知道如何使用期望参数的类结构来完成上述操作。即new Class(ar1, arg2);

我希望这是有道理的。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

你可以让你的类实现BeanFactoryAware,然后Spring会在你的类中注入bean工厂。如果你想获得一个实现你的接口的类的实例,你会说:

beanFactory.getBean(IClass.class);

如果有多个bean实现相同的接口,则必须按名称解析。要在每次提出这个问题时创建一个新对象,请将您要求的bean的bean范围设置为“prototype”。

答案 1 :(得分:0)

您可以包含以下代码:

ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
IClass clz = (IClass) context.getBean("beanName");

这并不是说这比Gerco的回答更好,只是它是一个选择,取决于你想做什么。

您还可以实现 ApplicationContextAware 接口:我发现使用ApplicationContext为我提供了带有填充属性的bean,例如:如果您有一个 app.properties 文件,其中包含您希望在Spring配置中解析的键/值属性对,那么通过BeanFactory调用检索的bean可能无法解析这些。

有关详细信息,请参阅此previous SO topic