7.Ioc/DI 的理解

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
  • 运行结果
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容