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

Java 将依赖项注入到不是由spring管理的库类中,java,spring,spring-boot,dependency-injection,Java,Spring,Spring Boot,Dependency Injection,我对spring或依赖注入相当陌生。我已经在一个jar文件中构建了一个抽象类A,它不是由Spring管理的(这是基于这样一个事实,即它没有任何自动连接的依赖项,库中没有使用Spring注释) 我有一个项目需要使用这个类,并希望注入我的类A依赖性实现(比如,类型B)。这个项目使用springboot 如何将类型B的依赖项注入到A中? 我尝试了以下几点: 1.创建了一个配置(@configuration)类,并添加了一个注释为@Bean的方法getB(),该方法将使用我的B实现返回类型为B的对象 @

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

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

如何将类型B的依赖项注入到A中? 我尝试了以下几点: 1.创建了一个配置(@configuration)类,并添加了一个注释为@Bean的方法getB(),该方法将使用我的B实现返回类型为B的对象

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

如果要将
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
   }

}

您的意思是希望(1)在
A
中插入
B
,以便在代码中使用
A
。或者(2)在你的项目中使用/inject
B
哪一个是
a
的子类?我想把B注入a。我已经创建了接口B的实现MyB,我想把它注入a。a是一个抽象类,包含B类型的字段,a和B都在一个已经构建好的jar中。然后看看我下面的答案,()如果有一个答案是可以的,请将你的问题标记为回答是的,接受了答案。非常感谢!工作。