0

这是此处帖子中的一些代码,可以解释我的问题:

界面:

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>
4

2 回答 2

1

当然,您必须实例化实现类:

<bean id="superWorker" class="org.better.place.SuperDuperClass"/>

parent如果您想创建多个具有您不想重复声明的公共属性的 bean,则只需要该属性,因此您将其移动到具体 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>

这将导致两个实例对 和 具有相同的值prop1prop2但对 具有不同的值prop3

于 2013-05-15T14:32:32.317 回答
0

您可以只给出实现类的完全限定名称,而不需要给出parent属性。Spring 会自动查找是否可以将实例分配SuperDuperClasssuperDuperSuperDuperService

<bean id="superWorker" class="org.better.place.SuperDuperClass" >
</bean>
于 2013-05-15T14:34:11.907 回答