如何自动装配将方法引用作为其依赖项之一的bean

时间:2018-07-19 14:18:09

标签: java spring autowired

我有一个CustomMap类,如下所示:

@Component
public class CustomMap<T extends Map<String, Object>> {
  private final Supplier<T> mapType;

    /**
     * @param mapType Lambda for creating new instances of map type
     */
    public CustomMap(Supplier<T> mapType) {
       this.mapType = mapType;
    }
}

我还有另一个依赖于上述CustomMap类的类:

@Component
public class A {
   private final CustomMap<MySupplier> customMap;

  public A(CustomMap<MySupplier> customMap) {
   this.customMap = customMap;
}
}

public class MySupplier extends HashMap<String, Object> {
    public MySupplier() {
    }
}

我必须以某种方式将这两个类自动装配在一起,以便spring进行初始化。我必须手动初始化下面要让弹簧照顾的A类。

A a = new A(new CustomMap<> (MySupplier::new))

1 个答案:

答案 0 :(得分:1)

我建议在A中为ApplicationConfig创建一个bean。例如:

@Configuration
public class ApplicationConfig {
    @Bean
    public A a() {
        return new A(new CustomMap<> (MySupplier::new));
    }
}

您可能正在使用组件扫描,因此应删除@Component批注,因为现在已在ApplicationConfig中创建了bean。