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 - 运行结果
网友评论