使用 new 关键字创建时在 Spring 存储库中自动装配

Autowiring in Spring repository when created with new keyword

我有如下服务

@Service
public class A {
     public B data() {
           InterfaceA B = (codition) ? new B1() : new B2();
           B.check();
     }
}

@Service
public class B1 {
     
     @Autowired
     private B1Repo b1repo;//repository

     public B1 check() {
           b1repo.find();
     }
}

当我 运行 服务 A.data() 进程时,我得到 b1repo 为空。由于我使用的是 new 关键字,因此存储库不是自动连接的。 我检查了以下问题 related_issue

但是并没有帮我解决问题

Spring 框架自行创建所有组件实例并填充所有必需的自动连接属性。这称为依赖注入。 当您创建服务的新实例时 class 它是一个没有自动连接的原始实例。

如果您必须通过某些条件获得服务的实施,我建议使用 Spring Profiles

@Service
public class A {
    @Autowired
    private B1 b1;

    @Autowired
    private B2 b2;

    public B data() {
        InterfaceA B = (codition) ? b1 : b2;
        B.check();
   }
}

@Service
public class B1 {
     
     @Autowired
     private B1Repo b1repo;//repository

     public B1 check() {
           b1repo.find();
     }
}

当你在 spring boot 中应用 D 的 SOLID 原则时 - 依赖倒置原则。这可能对你有帮助。