这里有一些帖子的代码可以解释我的问题:
接口:
package org.better.place
public interface SuperDuperInterface{
public void saveWorld();
}
实现:
package org.better.place
import org.springframework.stereotype
public class SuperDuperClass implements SuperDuperInterface{
public void saveWorld(){
System.out.println("Done");
}
}
客户端:
package org.better.place
import org.springframework.beans.factory.annotation.Autowire;
public class SuperDuperService{
private SuperDuperInterface superDuper;
public void doIt(){
superDuper.saveWorld();
}
public void setSuperDuper(SuperDuperInterface superDuper) {
this.superDuper = superDuper;
}
}
我的问题是 - 如何在spring配置中配置bean?我不想使用@Autowired
和其他注释。
我猜它会是这样的:
<bean id="superService" class="org.better.place.SuperDuperService">
<property name="superDuper" ref="superWorker"
</bean>
<bean id="superWorker" class=?????? parent=???????? >
</bean>
答案 0 :(得分:1)
当然,您必须实例化实现类:
<bean id="superWorker" class="org.better.place.SuperDuperClass"/>
如果要创建多个具有您不想重复声明的公共属性的bean,则只需要parent
属性,因此将其移动到具体bean定义可以的抽象父bean定义参考。
假设SuperDuperClass
有一些属性:
<bean id="superWorkerPrototype" abstract="true"
class="org.better.place.SuperDuperClass">
<property name="prop1" value="value1"/>
<property name="prop2" value="value2"/>
</bean>
<bean id="superWorker1" parent="superWorkerPrototype"
class="org.better.place.SuperDuperClass">
<property name="prop3" value="foo"/>
</bean>
<bean id="superWorker2" parent="superWorkerPrototype"
class="org.better.place.SuperDuperClass">
<property name="prop3" value="bar"/>
</bean>
这会导致两个实例的prop1
和prop2
具有相同的值,但prop3
的值不同。
答案 1 :(得分:0)
您可以只提供实现类的完全限定名称,而不需要提供parent
属性。 Spring会自动查找是否可以将SuperDuperClass
的实例分配给superDuper
的{{1}}字段
SuperDuperService