首页 > 解决方案 > 对运行时生成的依赖项使用spring依赖注入

问题描述

我是 Spring 新手,为了更好地了解我正在学习的内容,我决定将 Spring 集成到我的一个项目中。在项目中,在运行时会生成一个Events的集合,其中Event是一个POJO。FetcherA 和 FetcherB 是两个依赖于 Event 实例来获取其输出的类,这意味着 FetcherA 和 FetcherB 的输出对于不同的 Event 实例是不同的。

由于这些事件是在运行时生成的,我如何使用 Spring 依赖注入将事件 bean 注入到运行时创建的每个 FetcherA 和 FetcherB 对象中。下面是我的代码的示例。

public class Event {
     //some data fields
}

public class FetcherA {
    private Event event;

    FetcherA (Event event) {this.event=event}
    
    public String fetch () {//fetch output based on this event}
}

public class FetcherB {
    private Event event;

    FetcherB (Event event) {this.event=event}
    
    public String fetch () {//fetch output based on this event}
}

public static void main (String[] args) {
   List<Event> events = EventsFetcher.fetchEvent();
   List<String> myTextBook = new ArrayList<String>();
   events.forEach ( event -> {
      String messageBody= new FetcherA (event).fetch();
      String messageTitle = new FetcherB (event).fetch();
      myTextBook.add(messageBody);
      myTextBook.add(messageTitle);
   });

} ```

标签: javaspringoopdependency-injectionjavabeans

解决方案


在您的用例中EventFetcherA、 或FetcherB都不应该是 Spring 管理的,即它们不应该是 Spring bean。

如果您将该Fetch字段移动为fetch()方法的参数,则这将允许两个FetcherX类都是单例bean。

您可以坚持,在这种情况下,FetcherX类将是原型bean,并且您的代码将与 spring 容器集成以在循环内请求新实例。不是最理想的。


推荐阅读