Spring IOC

目录

引言

什么是IOC?

[Bean 的存储](#Bean 的存储)

类注解

@Controller注解

@Service注解

@Repository注解

@Configuration注解

方法注解

@Bean

扫描路径

[Spring IOC的实际应用](#Spring IOC的实际应用)

[1. 简化配置](#1. 简化配置)

[2. 降低耦合性](#2. 降低耦合性)

[3. 提高可测试性](#3. 提高可测试性)

结语


引言

Spring框架是一个强大的Java开发框架,提供了全面的基础设施支持,其中最重要的特性之一就是控制反转(Inversion of Control,简称IOC)。IOC通过将对象的创建和依赖关系的管理交给Spring容器来实现。降低了组件之间的耦合性,使得代码更加灵活、可维护。在本篇博客中,我们将深入介绍Spring IOC的概念、原理以及实际应用。


什么是IOC?

控制反转(IOC)是一种设计思想,其核心理念是将对象的创建、组装、管理等控制权从应用程序代码中转移到外部容器中。在传统的开发模式中,对象的创建和依赖关系通常由开发者直接管理,而在IOC容器中,这些任务交由容器负责,开发者只需关注业务逻辑的编写。

Spring IOC的实现依赖于容器,容器负责实例化、配置和组装各个组件。在Spring中,IOC容器有两种主要实现方式:BeanFactory和ApplicationContext。BeanFactory是Spring IOC容器的基础接口,而ApplicationContext是BeanFactory的子接口,提供了更多的功能,例如事件传播、AOP等。


Bean 的存储

Spring 容器管理的主要是对象,这些对象我们称之为"Bean"。我们把这些 Bean 交给 Spring 进行管理,由 Spring 来负责对象的创建和销毁,我们在写 Spring 代码的时候只需要告诉 Spring,哪些对象是我们要交给 Spring 管理,我们又要取出哪些对象进行使用。

  1. 类注解:@Controller、@Service、@Repository、@Configuration。

  2. 方法注解:@Bean

类注解

@Controller注解

控制层,接收请求,对请求进⾏处理,并进⾏响应。

java 复制代码
@Controller
public class UserController {
    public void sayHi() {
        System.out.println("hi, spring");
    }
}

@Service注解

业务逻辑层,处理具体的业务逻辑。

java 复制代码
@Service
public class UserController {
    public void sayHi() {
        System.out.println("hi, spring");
    }
}

@Repository注解

数据访问层,也称为持久层.负责数据访问操作。

java 复制代码
@Repository
public class UserController {
    public void sayHi() {
        System.out.println("hi, spring");
    }
}

@Configuration注解

配置层,处理项⽬中的⼀些配置信息。

java 复制代码
@Configuration
public class UserController {
    public void sayHi() {
        System.out.println("hi, spring");
    }
}

方法注解

光是类注解还是不够的,还存在两个问题:

  1. 使用外部包里的类,没办法添加类注解

  2. 一个类,需要多个对象,比如多个数据源

@Bean

在使用方法注解前,要先对该其类加上类注解。

java 复制代码
@Component
public class Bean {
    @Bean
    public User user() {
        User user = new User();
        user.setName("zhangsan");
        user.setAge(18);
        return user;
    }
}

扫描路径

当你加上注解后不一定会生效(当在 Spring 的扫描范围内才能别生效),Spring 默认扫描的为启动类(@SpringBootApplication)的所在的包。

例如:

下面这个会扫描到 com.lpy.book 所在的包

如果想要扫描不在该路径下的包,须在前面加上 @ComponentScan。

这里我将启动类放到了 service 包中,但是想访问 book 所在的包。


Spring IOC的实际应用

1. 简化配置

通过IOC容器,可以将应用程序的配置信息集中管理,使得配置更加灵活、易于维护。开发者可以通过修改配置文件或调整注解来改变程序行为,而不必修改大量的源代码。

2. 降低耦合性

IOC容器可以帮助开发者降低组件之间的耦合性。通过依赖注入,对象不再需要关心如何获取依赖对象,而是将这一任务交由容器完成,从而使得组件更加独立、可复用。

3. 提高可测试性

由于IOC容器负责管理对象的依赖关系,开发者可以更容易地进行单元测试。通过在测试时使用不同的配置,可以轻松地替换真实对象的依赖,从而提高代码的可测试性。

结语

Spring IOC是Spring框架的核心之一,通过控制反转的思想,提高了应用程序的灵活性、可维护性和可测试性。在实际应用中,合理利用IOC容器可以让开发者更加专注于业务逻辑的实现,而不必过多关注对象的创建和依赖关系。通过本文的介绍,相信读者对Spring IOC有了更深刻的理解,能够更加灵活地运用于实际项目中。

相关推荐
程序员-珍12 分钟前
使用openapi生成前端请求文件报错 ‘Token “Integer“ does not exist.‘
java·前端·spring boot·后端·restful·个人开发
liuxin3344556629 分钟前
教育技术革新:SpringBoot在线教育系统开发
数据库·spring boot·后端
2401_8572979138 分钟前
招联金融2025校招内推
java·前端·算法·金融·求职招聘
福大大架构师每日一题1 小时前
23.1 k8s监控中标签relabel的应用和原理
java·容器·kubernetes
金灰1 小时前
HTML5--裸体回顾
java·开发语言·前端·javascript·html·html5
菜鸟一皓1 小时前
IDEA的lombok插件不生效了?!!
java·ide·intellij-idea
爱上语文1 小时前
Java LeetCode每日一题
java·开发语言·leetcode
bug菌1 小时前
Java GUI编程进阶:多线程与并发处理的实战指南
java·后端·java ee
程序猿小D2 小时前
第二百六十九节 JPA教程 - JPA查询OrderBy两个属性示例
java·开发语言·数据库·windows·jpa
极客先躯2 小时前
高级java每日一道面试题-2024年10月3日-分布式篇-分布式系统中的容错策略都有哪些?
java·分布式·版本控制·共识算法·超时重试·心跳检测·容错策略