I think you may be looking for something like this:
Code:
<bean id="teller" class="sandbox.Teller"/>
<bean id="listener" scope="prototype"
factory-bean="teller" factory-method="addListener" />
<bean id="observer1" class="sandbox.ObservantBean">
<property name="listener" ref="listener"/>
</bean>
<bean id="observer2" class="sandbox.ObservantBean">
<property name="listener" ref="listener"/>
</bean>
<bean id="observer3" class="sandbox.ObservantBean">
<property name="listener" ref="listener"/>
</bean>
Where teller has a factory method to generate listeners bound to it:
Code:
public class Teller {
private List listeners = new ArrayList();
public void tellAll(String s){
for( int i = 0; i < listeners.size(); i++ )
((Listener) listeners.get(i)).tellMe(s);
}
public synchronized Listener addListener(){
Listener listener = new Listener();
listener.setMyNum(listeners.size());
this.listeners.add(listener);
System.out.println("Number of Listeners: " + listeners.size());
return listener;
}
}
Then invoking the following
Code:
Teller teller = (Teller) ctx.getBean("teller");
teller.tellAll("Hello, World");
results in
Code:
Number of Listeners: 1
Number of Listeners: 2
Number of Listeners: 3
Listener 0: Hello, World
Listener 1: Hello, World
Listener 2: Hello, World