1、概述
- 控制反转(Inverse of Control,IoC)不是什么技术,而是一种设计思想。它的目的是指导设计出更加松耦合的程序。
控制:在 Java 中指的是对象的控制权限(创建、销毁等)
反转:指的是对象控制权由原来由开发者在类中手动控制反转到 Spring 容器(IoC 容器)控制
![](https://img.haomeiwen.com/i20052341/c379f7eb37605ff4.jpg)
2、Spring IoC 简单举例
- 1、引入 Maven 依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.8</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
- 2、编写接口和实现类
public interface UserRepo {
Integer deleteUserById(Integer id);
}
import com.yscyber.spring.one.repo.UserRepo;
public class UserRepoImpl implements UserRepo {
@Override
public Integer deleteUserById(Integer id) {
System.out.println("删除用户······");
return 1;
}
}
- 3、在
resources
目录下,创建 Spring 核心配置文件,src/main/resources/applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd">
</beans>
- 4、在
applicationContext.xml
中配置 Bean
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="userRepo" class="com.yscyber.spring.one.repo.impl.UserRepoImpl"/>
</beans>
- 5、使用 Spring 的 API 获取
UserRepo
的实例(从 IoC 容器中获取对象实例)
@Test
public void test1() {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
UserRepo userRepo = (UserRepo) applicationContext.getBean("userRepo");
userRepo.deleteUserById(1);
}
3、Spring 一些比较重要的 API
![](https://img.haomeiwen.com/i20052341/8f16cd4a786ffc59.jpg)
-
org.springframework.beans.factory.BeanFactory
接口是 IoC 容器的核心接口,其中定义了 IoC 的基本功能。 -
org.springframework.context.ApplicationContext
接口,应用上下文接口。在 Spring 容器启动时,加载并创建所有对象的实例。
![](https://img.haomeiwen.com/i20052341/f5d8ec981618ec0c.jpg)
![](https://img.haomeiwen.com/i20052341/cd6a32e6a21ad7b9.jpg)
4、Spring 核心配置文件
-
Spring 核心配置文件的基本功能是在其中配置需要交给 Spring 容器(IoC 容器)管理的类。
-
<bean>
标签
基于反射机制创建出类的对象(实例),默认情况下“借助”类的“无参构造”
![](https://img.haomeiwen.com/i20052341/de09cffe45740949.jpg)
- 由 Spring 容器管理的对象的作用域
![](https://img.haomeiwen.com/i20052341/d4541e05d901ee50.jpg)
![](https://img.haomeiwen.com/i20052341/c878deed6036b2bc.jpg)
- 由 Spring 容器管理的对象的生命周期
![](https://img.haomeiwen.com/i20052341/00ac4ab1c6ac9b78.jpg)
5、Spring 容器实例化对象的方式
5.1、无参构造
![](https://img.haomeiwen.com/i20052341/5c8b23fc5ab670fd.jpg)
5.2、工厂 静态方法
![](https://img.haomeiwen.com/i20052341/3aa8449857bd8d3e.jpg)
5.3、工厂 普通方法
![](https://img.haomeiwen.com/i20052341/196fa11ad9195027.jpg)
6、依赖注入
-
依赖注入(Dependency Injection,DI),是 IoC 的具体实现。
-
既然将对象交给 Spring 容器去管理,那么“获取”自然也得通过 Spring 容器。“依赖注入”简单理解就是由 Spring 容器对变量“赋值”(给对象中的成员变量赋值)。
6.1、依赖注入的方式
- 1、有参构造
![](https://img.haomeiwen.com/i20052341/9ef6a18a36d57d0e.jpg)
- 2、setter
![](https://img.haomeiwen.com/i20052341/625c4ef19de74f08.jpg)
- 3、P 命名空间
![](https://img.haomeiwen.com/i20052341/5d9a3d1c0212470f.jpg)
6.2、不同数据类型的依赖注入
- 1、注入普通数据类型
![](https://img.haomeiwen.com/i20052341/4e0d115197a6da50.jpg)
- 2、注入引用数据类型
![](https://img.haomeiwen.com/i20052341/625c4ef19de74f08.jpg)
- 3、注入集合数据类型
![](https://img.haomeiwen.com/i20052341/038da1812b9b17e3.jpg)
![](https://img.haomeiwen.com/i20052341/66d0c6fa70b7cb83.jpg)
![](https://img.haomeiwen.com/i20052341/66035cc6532477e2.jpg)
网友评论