首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
华为云
V2EX  ›  Java

为什么不同的 bean 会装配到同一个 component ?

  •  
  •   lxy · 124 天前 · 433 次点击
    这是一个创建于 124 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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"/>
    
    第 1 条附言  ·  123 天前

    惊了,这么简单的问题。按如下配置即可。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"/>
    
    目前尚无回复
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   鸣谢   ·   实用小工具   ·   3120 人在线   最高记录 3762   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.1 · 13ms · UTC 06:34 · PVG 14:34 · LAX 23:34 · JFK 02:34
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1