Spring Boot 学习:第二天
1. 接口
1.1 接口概念
接口(Interface)是一个抽象方法的集合。我们通过 interface
关键字来声明接口。在接口中,只定义方法的签名(如方法名、参数类型、返回类型等),并不包含方法的实现。具体的实现由类来完成。一个类可以通过 implements
关键字实现接口,从而提供具体的功能。
接口的作用类似于 C++ 中的 .h
和 .c
文件:在 .h
文件中声明函数原型,而在 .c
文件中实现具体的函数逻辑。
1.2 接口示例
假设我们有一个 EmpService
接口,定义了一个 listEmp()
方法:
public interface EmpService {
public List<Emp> listEmp();
}
在接口中,我们只是声明了方法,并没有实现具体的逻辑。接下来,我们创建一个类来实现这个接口:
public class EmpServiceA implements EmpService {
//@Autowired
private EmpDao empDao;
@Override
public List<Emp> listEmp() {
List<Emp> empList = empDao.listEmp();
// 处理性别
empList.forEach(emp -> {
String gender = emp.getGender();
if ("1".equals(gender)) {
emp.setGender("男");
} else if ("2".equals(gender)) {
emp.setGender("女");
}
// 处理职位
String job = emp.getJob();
if ("1".equals(job)) {
emp.setJob("讲师");
} else if ("2".equals(job)) {
emp.setJob("班主任");
} else {
emp.setJob("就业指导");
}
});
return empList;
}
}
1.3 接口的作用
- 方法复用:当一组方法需要在多个类中实现时,接口可以将这些方法提取出来,避免代码重复,减少复杂性。
- 统一规范:接口定义了一组必须实现的方法,确保不同的类有相同的行为规范。
- 解耦设计:通过接口,可以实现不同类之间的通信,而不需要知道它们具体的实现。这样有利于代码的解耦和可扩展性。
2. Bean 与 IOC 容器
2.1 Bean 和 IOC 容器概念
在 Spring 中,我们不需要手动 new
一个类的实例。Spring 在启动时会根据配置自动实例化所需的类对象,并且如果类有依赖,Spring 会先实例化依赖对象,然后再实例化当前类对象。
这就是 依赖注入(Dependency Injection, DI)的概念。Spring 会自动将依赖的类注入到目标类中,避免了手动创建对象的繁琐过程。
2.2 控制反转(Inversion of Control, IoC)
Spring 的核心思想是 控制反转(IoC)。传统的 Java 程序员会负责对象的创建和依赖的管理,但在 Spring 中,对象的创建和依赖管理交由 Spring 容器来控制,而不是程序员。这种反转控制的方式使得代码更加灵活且易于维护。
2.3 IOC 的优势
- 解耦:通过 IoC,类与类之间的耦合度降低,每个类只关心自己的功能,而不需要关心其他类的实现。
- 简化管理:对于具有复杂依赖关系的类,IoC 可以自动处理对象的创建和依赖注入,避免了手动管理对象依赖的麻烦。
- 灵活配置:通过 Spring 的配置文件或注解,我们可以灵活地指定如何构建和管理对象,而不需要手动操作每个对象的创建过程。
2.4 Spring 中的 Bean
在 Spring 中,每个需要管理的类都被称为 Bean。我们通过将类标注为 @Component
或使用 XML 配置文件来将其交给 Spring IoC 容器管理。
@Component
注解
@Component
注解告诉 Spring 容器将该类交由 IoC 容器管理,Spring 会自动为它创建实例,并在需要的地方注入。
@Component
public class EmpServiceA implements EmpService {
private EmpDao empDao;
@Autowired
public EmpServiceA(EmpDao empDao) {
this.empDao = empDao;
}
@Override
public List<Emp> listEmp() {
// 业务逻辑
}
}
@Autowired
注解
@Autowired
注解用于 依赖注入,告诉 Spring 容器自动注入所需的依赖。Spring 会查找容器中与属性类型匹配的 Bean,并自动注入到类的成员变量、构造方法或 setter 方法中。
@Autowired
private EmpDao empDao;
2.5 总结
- Bean:Spring 管理的对象。
- IoC 容器:负责创建 Bean 和管理它们的生命周期。
- 依赖注入(DI):自动注入类的依赖,减少手动创建对象的麻烦。
- 控制反转(IoC):控制权从开发人员转移到 Spring 容器,容器负责对象的创建和依赖管理。
总结
- 接口是方法声明的集合,可以通过实现接口来提供具体的功能,降低类之间的耦合度。
- Spring 的 IoC 容器负责 Bean 的生命周期管理,自动处理依赖关系,实现依赖注入,简化了对象创建和管理的过程。