Java-Spring入门:IOC容器与依赖注入

  1. Spring是什么?(一个轻量级的Java开发框架,核心是IOC和AOP)。

  2. 为什么需要它?(解决传统Java EE开发中对象耦合度高、代码臃肿的问题)。

  3. 什么是IOC/DI?(用“工厂模式+配置文件/注解”来管理对象,而不是由对象自己创建依赖)。

  4. 一个最简单的体验:用Spring容器获取一个Bean(对象),而不使用 new 关键字。

  5. Spring家族图谱:简单介绍Spring Boot(简化配置)、Spring MVC(Web层)、Spring Cloud(微服务)分别扮演什么角色。

1、Spring 是什么?

传统开发

对象之间的依赖关系(如 Service 依赖 Dao)是由对象自己在代码中通过 new 关键字创建的

1、导致问题:导致代码耦合度高、难以测试、维护困难。

Spring开发

Spring 提供了一个“容器”(即 IOC 容器),它负责创建和管理所有的对象(称为 Bean),并自动将依赖的对象“注入”给需要它的对象。

1、实现效果:对象不再主动找依赖,而是被动接收依赖。

IOC(控制反转)

对象的创建和管理权,从代码本身(new)反转给Spring 容器来创建和管理。

DI(依赖注入)

IOC容器在创建对象时,自动把它所依赖的其他对象“注入”给它。

1、IOC 是一种设计思想,DI 是实现这种思想的具体方式。

2、代码示例

1、定义一个简单的服务类

// 1. 使用 @Component 注解,告诉 Spring 这个类需要被容器管理(就是Bean)
@Component
public class GreetingService {
    public String sayHello() {
        return "Hello from Spring!";
    }
}

 

2、创建 Spring 容器并获取 Bean

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

// 2. 配置类:告诉 Spring 要扫描哪些包下的注解
@Configuration
@ComponentScan(basePackages = "com.example") // 扫描 com.example 包
class AppConfig {
}

public class SpringDemo {
    public static void main(String[] args) {
  // 1. 创建 Spring 容器(IOC 容器)
  // 2. 根据 @ComponentScan 配置,扫描指定包下的所有类
  // 3. 找到所有带有 @Component 等注解的类,创建其实例(Bean)
  // 4. 检查这些 Bean 中是否有 @Autowired 等依赖,如果有,则自动注入
  // 5. 容器准备就绪,可以通过 getBean() 方法获取已管理的 Bean

ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class); // 4. 从容器中获取 Bean(无需 new!) GreetingService service = context.getBean(GreetingService.class); // 5. 使用 Bean System.out.println(service.sayHello()); } }

 

3、实际使用

// 1. Dao 类
@Component
public class UserDao {
    public String getUserName() {
        return "张三";
    }
}

// 2. Service 类,依赖 UserDao
@Component
public class UserService {
    // 使用 @Autowired 注解,Spring 会自动注入 UserDao 的实例
    // 没有创建 UserDao,而是由 Spring 自动注入的
    @Autowired
    private UserDao userDao;

    public void printUserName() {
        System.out.println("用户名: " + userDao.getUserName());
    }
}

// 3. 在 main 方法中获取 UserService
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
UserService userService = context.getBean(UserService.class);
userService.printUserName(); // 输出:用户名: 张三

 

 

3、Spring 家族图谱(简介)

项目定位核心价值
Spring Framework 基础框架 提供 IOC 容器、AOP 等核心能力(本篇介绍)
Spring Boot 配置简化工具

1、“约定大于配置”,自动配置,快速创建独立应用。

2、基于 Spring Framework 的工具,通过“自动配置”和“起步依赖”,极大地简化了 Spring 应用的搭建和配置。

3、“开箱即用的 Spring”,底层依然是 IOC 容器和依赖注入这些核心机制。

Spring MVC Web 层框架 基于 Servlet 的 MVC 模式,用于构建 Web 应用和 RESTful API
Spring Cloud 微服务工具集 提供服务注册、配置管理、网关等微服务治理能力
Spring Data JPA 数据访问简化 简化数据库访问的模板和 Repository 实现
posted @ 2026-08-17 11:33  Fēngwèi  阅读(7)  评论(0)    收藏  举报