Bean,IOC与接口

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 接口的作用

  1. 方法复用:当一组方法需要在多个类中实现时,接口可以将这些方法提取出来,避免代码重复,减少复杂性。
  2. 统一规范:接口定义了一组必须实现的方法,确保不同的类有相同的行为规范。
  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 的生命周期管理,自动处理依赖关系,实现依赖注入,简化了对象创建和管理的过程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值