Java 将依赖项注入到不是由spring管理的库类中
我对spring或依赖注入相当陌生。我已经在一个jar文件中构建了一个抽象类A,它不是由Spring管理的(这是基于这样一个事实,即它没有任何自动连接的依赖项,库中没有使用Spring注释) 我有一个项目需要使用这个类,并希望注入我的类A依赖性实现(比如,类型B)。这个项目使用springboot 如何将类型B的依赖项注入到A中? 我尝试了以下几点: 1.创建了一个配置(@configuration)类,并添加了一个注释为@Bean的方法getB(),该方法将使用我的B实现返回类型为B的对象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的对象 @
@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)在你的项目中使用/injectB
哪一个是a
的子类?我想把B注入a。我已经创建了接口B的实现MyB,我想把它注入a。a是一个抽象类,包含B类型的字段,a和B都在一个已经构建好的jar中。然后看看我下面的答案,()如果有一个答案是可以的,请将你的问题标记为回答是的,接受了答案。非常感谢!工作。