Java:控制反转(IoC)与依赖注入(DI)
发布日期:2021-04-30 21:10:59 浏览次数:106 分类:精选文章

本文共 3832 字,大约阅读时间需要 12 分钟。

???????????????????????????????????????????????????????????? Java ?????????????????????????

???????

????????????????????????????????????????????????????????????????????????????????????????

???????????????????????????????????????

public class Xiaoer {
public void saodi() {
System.out.println("??????????");
}
}
public class Laowang {
public void mingling() {
new Xiaoer().saodi();
}
}

?????????

public class Test {
public static void main(String[] args) {
Laowang laowang = new Laowang();
laowang.mingling();
}
}

???????Laowang ?? mingling ????? new ???????? Xiaoer ?????????????????????

??????????????????????????????????????

public class Xiaosan {
public void saodi() {
System.out.println("??????????");
}
}
public class Laowang {
public void mingling() {
new Xiaoer().saodi();
}
public void mingling1() {
new Xiaosan().saodi();
}
}

??????????????????????????????????????????????????

????????

??????????????????????????????????????????????????????

????????????????

public interface Heshang {
void saodi();
}

??????????

public class Xiaoer implements Heshang {
@Override
public void saodi() {
System.out.println("??????????");
}
public boolean isYijinjing() {
return false;
}
}

??????????

public class Xiaosan implements Heshang {
@override
public void saodi() {
System.out.println("??????????");
}
}

????????????

public class Laofang {
public static Heshang getSaodiseng() {
Xiaoer xiaoer = new Xiaoer();
if (xiaoer.isYijinjing()) {
return new Xiaosan();
}
return xiaoer;
}
}

???????????????

public class Laowang {
public void mingling() {
Laofang.getSaodiseng().saodi();
}
}

?????????????????????????????????????Inversion of Control?IoC????????????????????????

????????

?????Dependency Injection??? DI??????????????????????? A ????????????? B ?????????????????????????????????????????

  • ????????????????????????
  • public class Laowang {
    private Heshang saodiseng;
    public Laowang(Heshang saodiseng) {
    this.saodiseng = saodiseng;
    }
    public void mingling() {
    this.saodiseng.saodi();
    }
    }
    1. ?? set ?????????? public set ?????????????????????
    2. public class Laowang {
      private Heshang saodiseng;
      public Heshang getSaodiseng() {
      return saodiseng;
      }
      public void setSaodiseng(Heshang saodiseng) {
      this.saodiseng = saodiseng;
      }
      public void mingling() {
      this.getSaodiseng().saodi();
      }
      }
      1. ??????????????????????????????????????????????
      2. ????????????????????????????????????????

        ??? Spring ???

        ?????????????????????????? Spring ???Spring ???????????????????????????????set ?????????????????????

        ???? pom.xml ????? Spring ?????

        org.springframework
        spring-context-support
        4.3.2.RELEASE

        ???? Laowang ?????

        public class Laowang {
        private Heshang saodiseng;
        public Laowang(Heshang saodiseng) {
        this.saodiseng = saodiseng;
        }
        public void mingling() {
        this.saodiseng.saodi();
        }
        }

        ???? Spring ???? application.xml?

        ?????????????????????????????????????

        ??????????

        public class Test {
        public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("application.xml");
        Laowang laowang = (Laowang) context.getBean("laowang");
        laowang.mingling();
        }
        }

        ????????????? IoC ?? Spring????????????????

        ????

      3. ????????????????????????????????????????????????????

      4. ?????????????????????????set ???????????????????????

      5. Spring ????????????????????????????????????????

      6. ?????????????????????????????????? Spring ???????

    上一篇:初探JVM,你只需要看这篇文章!
    下一篇:教妹学Java(五):Java程序在编译和运行时发生了什么

    发表评论

    最新留言

    能坚持,总会有不一样的收获!
    [***.219.124.196]2026年06月17日 08时06分29秒