将依赖项注入不由spring管理的库类中

时间:2018-01-02 08:32:20

标签: java spring spring-boot dependency-injection

我对春天或依赖注入很新。我已经在一个jar文件中创建了一个抽象类A,它不是由Spring管理的(这是基于它没有自动连接的任何依赖项,库中没有使用spring注释的事实。)。 / p>

我有一个项目需要使用这个类,并希望注入我的类A的依赖(例如,类型B)的实现。这个项目使用springboot。

如何将B类型的依赖关系注入A? 我试过以下: 1.创建一个配置(@Configuration)类,并添加一个注释为@Bean的方法getB(),它将使用我的B实现返回类型B的对象。

@Bean
public B getB () {
   return new MyB();
}

1 个答案:

答案 0 :(得分:2)

如果您想将B注入A,则不能。由于A不是由Spring管理的,因此IOC容器永远不会在他不知道的类中注入任何内容。

问题的关键在于您希望获取和使用A的实例。

如果您想在Spring管理的代码中使用A,那么您必须为A创建一个工厂:

@Bean
public A a() {
    B b = new MyB();
    A a = new A(b); // new A is not possible since A is abstract but you got the idea
    return a;
}

// ...

class MyService {
   @Autowired
   A a;

   void something() {
      (a.b instanceof MyB) // true
   }

}