前言
一、Spring核心之 IOC 、DI
1. IOC
IOC(Inversion of Control):控制反转
控制反转指的是将对象的创建、管理权限从我们程序猿的手里,移交给我们Spring框架。
这时我们不再有创建、管理对象的主动权,改为被动的接收、使用,这种控制权的转换我们称之为控制反转。
主动控制:适合创建简单对象。
控制反转:适合管理创建过程复杂的对象。
2. DI
DI(Dependency Injection):依赖注入
依赖注入指的是在程序运行期间,由外部容器(Spring)动态的将依赖对象注入到组件中。其实IOC 和 DI 其实是同一个概念。依赖注入是实现控制反转的方式。
目的:解耦
关系:has a
从概念来讲,实际太过于抽象,作为刚刚接触Spring框架的小伙伴们来说,真心不能够理解,实际我也曾经是其中的一员。但是对于操作来讲极其简便。这就是我上文说到的,刚刚学习框架,要做到不求甚解。
举个例子:
我们要完成某样有实际意义的功能,一般来讲都需要两个或两个以上的类组成,并互相之间协作完成的结果。按照传统来讲,我们的每个对象都需要管理和自己互相协作的对象(它所以依赖的对象)的引用,这将导致高度耦合。
而如果我们通过DI,这种对象的依赖关系就由Spring这个框架去进行管理,那我们就实现了松耦合。其次我们现在都是基于接口编程,也是使得其解耦低的原因所在,实现了可替换性。
面向接口编程(解耦 / 松耦合)
二、第一个Spring项目
1. IOC - 代码实现
1.1 第一种方式:@Configuration + @Bean
项目结构:
创建一个 Maven 项目,
导入依赖 (pom.xml)
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.2.RELEASE</version>
</dependency>
</dependencies>
pom.xml 文件 如图所示:
创建JavaBean - DemoBean
/**
* @Author lss
*/
public class DemoBean {
}
创建配置类
/**
* @Author lss
*/
@Configuration
public class Config {
@Bean
public DemoBean getDemoBean() {
return new DemoBean();
}
}
测试 DemoBean 对象是否交给Spring去管理
/**
* @Author lss
*/
public class IOCTest {
public static void main(String[] args) {
// 初始化Spring容器
ApplicationContext ac =
new AnnotationConfigApplicationContext(Config.class);
// 获取被管理的JavaBean
DemoBean bean = ac.getBean(DemoBean.class);
System.out.printl