美文网首页
7.Ioc/DI 的理解

7.Ioc/DI 的理解

作者: Rebirth_914 | 来源:发表于2019-03-04 20:16 被阅读0次

    1 、基本概念

    • IOC(控制反转):全称为:Inverse of Control。从字面上理解就是控制反转了,将对在自身对象中的一个内置对象的控制反转,反转后不再由自己本身的对象进行控制这个内置对象的创建,而是由第三方系统去控制这个内置对象的创建。
    • IoC的作用:Ioc容器管理所有的bean(java对象)以及相互间的依赖关系
    • DI(依赖注入):全称为Dependency Injection,意思自身对象中的内置对象是通过注入的方式进行创建。

    2、IoC(控制反转)的两种设计模式

    2.1 反射

    在运行状态中,根据提供的类的路径或类名,通过反射来动态地获取该类所有属性的方法

    • Java反射就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;
    • 当我们输入一个队长或者类并向调用它的属性和方法时,一按 (“.”)点号,编译器就会自动列出它的属性或方法,这里就会用到反射。

    2.2 工厂模式

    某个类中定义用于提供依赖对象的方法,这个方法可以是一个单纯的虚方法,也可以是具有默认实现的虚方法,至于方法声明的返回类型,可以是一个接口或者抽象类,也可以是未被封闭(Sealed)的具体类型。作为它的派生类型,它可以实现或者重写工厂方法以提供所需的具体对象。

    3、DI(依赖注入)的两种注入方式

    3.1 构造器注入(constructor-arg)

    • 该注入方法是在bean标签中实现的


      Snipaste_2019-03-04_20-11-40.png

    3.2 setter注入(property)

    Snipaste_2019-03-04_20-12-49.png

    注意!!!

    • 注入对象中没有setter方法的实现,则使用构造器注入的方式。
    • 对于强依赖,可使用构造器注入,对于弱依赖,推荐使用Setter注入

    4、配置和使用

    配置方式有

    • xml形式

    <bean id = "..." class="...">

    </bean>

    • 注解形式

    @Configuration
    public class AppConfig{
    @Bean
    public MyService myService(){
    return new MyServiceImpl();
    }
    }

    5、依赖注入的实例

    • 消息服务接口用来打印消息


      MessageService.png
    • 修改消息服务类接口的实现MessageServiceImpl


      MessageServiceImpl.png

      其中,MessageServiceImpl是带参构造函数,username、age这两个参数的值将在getMessage方法中实现

    • 修改打印器


      MessagePrinter.png
    • 修改应用主类


      Application.png
    • 创建配置文件


      Snipaste_2019-03-04_21-02-26.png
    • 运行结果

    相关文章

      网友评论

          本文标题:7.Ioc/DI 的理解

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