什么是IOC?
IoC(Inversion of Control,控制反转)是Spring框架的核心概念之一,它允许开发者将对象的创建和依赖关系的维护交给Spring容器来管理,而不是在代码中直接创建和配置对象。在Spring中,IoC主要通过XML配置或注解来实现。
注解(Annotations)是Java提供的一种为代码添加元数据的机制,Spring框架提供了丰富的注解来支持IoC容器的配置。使用注解可以极大地简化配置工作,使得代码更加简洁和易于维护。
什么是DI?
DI(Dependency Injection,依赖注入)是IoC(Inversion of Control,控制反转)的一种实现方式。在DI中,对象的依赖关系不是由对象本身在内部创建和管理,而是由外部容器(如Spring容器)在创建对象时注入。这种方式有助于降低对象之间的耦合度,提高代码的可测试性和可维护性。
DI详解
三种注入方法
例如
IOC注解概述
注意:前面声明bean的四大注解,要想生效,还需要被组件扫描注解@ComponentScan扫描。
该注解虽然没有显式配置,但是实际上已经包含在了启动类声明注解 @SpringBootApplication 中,默认扫描的范围是启动类所在包及其子包。
在Spring框架中,与IoC相关的常用注解包括但不限于以下几种:
-
@Autowired
:用于自动注入依赖对象。它可以应用于字段、setter方法或构造器上。Spring容器会在创建bean时,自动寻找匹配的bean注入到被@Autowired
标注的字段或方法中。 -
@Qualifier
:与@Autowired
配合使用,用于指定注入bean的名称。当Spring容器中存在多个相同类型的bean时,可以使用@Qualifier
来指定注入哪一个bean。 -
@Component
:这是一个通用的注解,用于标注一个类为Spring容器中的一个组件(bean)。被@Component
标注的类会被Spring容器自动扫描并注册为bean。 -
@Repository
:用于标注DAO(Data Access Object)组件。它继承自@Component
,除了具有@Component
的功能外,@Repository
还提供了对异常转译的支持,能够将DAO层的特定异常转换为Spring的通用数据访问异常。 -
@Service
:用于标注服务层(Service Layer)组件。它同样继承自@Component
,用于标注业务逻辑层的组件。 -
@Controller
:用于标注控制层(Controller Layer)组件。在Spring MVC框架中,@Controller
注解用于标注控制器组件,使得该类能够处理HTTP请求。 -
@Scope
:用于指定bean的作用域。Spring支持多种作用域,包括单例(Singleton)、原型(Prototype)、请求(Request)、会话(Session)等。 -
@Bean
:在配置类中使用,用于定义一个bean。通过@Bean
注解的方法,可以显式地声明和配置一个bean,并返回该bean的实例。