java - 将依赖项注入(inject)到不受 spring 管理的库类中

标签 java spring spring-boot dependency-injection

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

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

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

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

最佳答案

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

问题的关键是您想要获取和使用 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
   }

}

关于java - 将依赖项注入(inject)到不受 spring 管理的库类中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48057812/

相关文章:

java - 值如何动态变化

java - application.yml 中带数组参数的@GetMapping

java - Java中如何调用带有函数输入的方法?

java - 使用流来操作字符串

java - 从日志文件中读取 1 TB 的数据

java - Jetty maven插件和spring 4.1.6 - 类未找到异常

spring - 整合jqgrid、mybatis、spring mvc和postgresql

java - 在jsp中获取当前页面的apache tiles

java - 使用 Rest 模板对外部网站进行 PUT 调用

java - 在 Spring 使用 Haversine 公式获取最近的位置