【问题标题】:Inversion of control based on properties file基于属性文件的控制反转
【发布时间】:2021-07-26 06:07:57
【问题描述】:

下面是我的界面:-

 interface Student {
       findById();
    }

以下是我的 2 个接口实现:-

class Matriculation implements Student {
   findById(){
      //implementation
    }
}
class Graduation implements Student {
     findById(){
     //implementation
     }
}

application.properties

毕业=真

调用类:-

class Test {

@Autowired 
Student student ;
   
   method(){

   student.findById();
 }
}

如果毕业是真的,我想调用毕业班 findById 否则我想调用预科 findById 方法。我如何在 SpringBoot 中实现这一点?

【问题讨论】:

  • 只需使用 if else 条件检查值,使用 @Value 进行毕业(字符串/布尔值)。

标签: spring spring-boot spring-mvc spring-data-jpa spring-data


【解决方案1】:

在 cmets 中正确指示,这是一个可能的实现。

class Test {

   @Autowired 
   Matriculation matriculationStudent ;

   @Autowired
   Graduation graduationStudent;

   @Value("${graduation}")
   private boolean graduation;
   
   void method(){

   if (graduation) {
   graduationStudent.findById();
   } else {
   matriculationStudent.findById();
   }
 }
}

【讨论】:

    【解决方案2】:

    您将像这样创建一个 Spring 组件:

    @Component
    public class StudentFactory {
    
        @Autowired
        private Matriculation matriculation;
    
        @Autowired
        private Graduation graduation;
    
        @Value("${graduation}")
        private boolean graduationValue;
    
        public Student getImplementation() {
            if (graduationValue) {
              return graduation;
            } else {
              return matriculation;
            }
         }
    
    }
    

    然后你只需在 Test 类中注入工厂并调用 getImplementation 方法

    【讨论】:

      【解决方案3】:

      您可以使用@ConditionalOnProperty 注释。像这样:

      @ConditionalOnProperty(name = "graduation", havingValue = "true")
      @Service
      public class Graduation implements Student
      {
        @Override
        public String findById()
        {
          return "Graduation";
        }
      }
      

      【讨论】:

        猜你喜欢
        • 2020-10-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-28
        • 2022-01-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多