SpringMVC。如果我想让不同的 bean 也装配不同的 component 应该怎么做? 配置大概是这样:
<!--Listener-->
<bean id="MyListener" class="com.example.MyListener" scope="prototype"/>
简化的例子
// MyListener.java
@Aync
public class MyListener implements ApplicationListener<MyEvent> {
@Autowired
private MyExecutor myExecutor;
private String listenerId;
@Override
public void onApplicationEvent(MyEvent myEvent) {
this.listenerId = myEvent.getId();
this.myExecutor.setId(myEvent.getId()); // sleep 5s
System.out.println(this.listenerId);
}
}
// MyExecutor.java
@Component
public class MyExecutor {
private String exeId;
public void setId(Stirng id) {
this.exeId = id;
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
}
System.out.println(this.exeId);
}
}
如果在 5 秒内连发两个 ID 不同的 Event,那么会看到 Event 由不同的 Listener 处理,但是执行了相同的 myExecutor。
也试过增加这个配置,不行。
<!--Executor-->
<bean id="MyExecutor" class="com.example.MyExecutor" scope="prototype"/>
惊了,这么简单的问题。按如下配置即可。Listener 还要加个setMyExecutor方法。
<!--Listener-->
<bean id="MyListener" class="com.example.MyListener" scope="prototype">
<property name="myExecutor" ref="MyExecutor"/>
</bean>
<!--Executor-->
<bean id="MyExecutor" class="com.example.MyExecutor" scope="prototype"/>