美文网首页
控制反转 Inversion Of Control

控制反转 Inversion Of Control

作者: 漂流_15da | 来源:发表于2020-01-16 02:03 被阅读0次
  1. 控制反转是一种设计模式,目的在于降低系统内部组件之间的相互依赖,使用依赖注入Dependence Inspect。

比如 classA中用到了classB的功能,实体依赖的方式:

  Class A {
      private ClassB b = new ClassB();
      public funcA() {
            this.b.funcB();
      }
  }
  1. 如果ClassB可能存在多种实现,需要降低对某一个具体类的依赖,需要进一步按照接口依赖的方式进行设计:
  Class A {
      private InterfaceB b;
      A(InterfaceB b) {
          this.b = b;
      }

      public void setB(InterfaceB b) {
          this.b = b;
      }
      public funcA() {
            this.b.funcB();
      }
  }

这样依赖,Class A不依赖与具体Class B的实现,而是依赖与InterfaceB,凡是实现了InterfaceB的实例都可以注入进来,完成具体业务功能。这里就可以理解为控制反转,ClassB的设计需要根据Class A 对 InterfaceB的需求来实现,而不再是ClassA的功能需要依赖ClassB的实现。

  1. 实现了接口依赖的设计之后,需要有地方对各个类进行实例话并按照接口依赖完成装配工作(注入工作),这里需要的就是一个对象(组件)管理器,完成组件发现、实例化、依赖注入、生命周期管理。 Spring的@Component、@Service、@Controller等声明被管理的组件,@
    Autowired 注解用来申明依赖注入点。
  @Component
  Class B Implements InterfaceB {}

  @Component
   Class A() {
      @Autowired
      private InterfaceB b;

      public void funcA() {
          this.b.funcB();
      }
   }

注意:只有声明了@Component (或则@Service等)的组件,才能被自动注入依赖。如果依赖的接口有多个实现,可以使用@Qualifier('xxx') 对组件进行限定。

相关文章

网友评论

      本文标题:控制反转 Inversion Of Control

      本文链接:https://www.haomeiwen.com/subject/eamtzctx.html