有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用new关键字创建时Spring存储库中的java自动连接

我有下面这样的服务

@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

但这并没有帮我解决这个问题


共 (2) 个答案

  1. # 1 楼答案

    @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依赖反转原理的实体原理时。这可能对你有帮助

  2. # 2 楼答案

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

    如果必须在某种条件下实现服务,我建议使用Spring Profiles