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

问题描述 投票:0回答:1

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

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

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

@Bean
public B getB () {
   return new MyB();
}
java spring spring-boot dependency-injection
1个回答
2
投票

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

问题的关键在于您想要获取和使用A实例的方式。

如果你想在你的春天管理的代码中使用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
   }

}
© www.soinside.com 2019 - 2024. All rights reserved.