一文了解SpringBoot中的IOC

目录

1.什么是IOC

2.IOC容器

3.创建IOC容器

4.装配Bean到IOC容器

5.依赖注入


1.什么是IOC

IOC:Inversion of Control 控制反转

Sping中我们把一个个对象称为Bean,以前我们实例一个对象的时候,都会直接New一个

而在Spring中,我们可以把对象创建、组装、管理的权限交给IOC,这就是控制反转

2.IOC容器

Spring中的IOC容器,可以降低对象之间的耦合度,便于测试和维护。

3.创建IOC容器

先声明一个启动类

@RefreshScope
@EnableDiscoveryClient
@EnableFeignClients(basePackages = {
		ApiConstant.SERVER_API_BASE_PACKAGE,
		com.erichfund.yoch.api.constant.ApiConstant.SERVER_API_BASE_PACKAGE,
		com.erichfund.lawwood.api.constant.ApiConstant.SERVER_API_BASE_PACKAGE
})
@EnableAspectJAutoProxy(proxyTargetClass = true,exposeProxy = true)
@SpringBootApplication(scanBasePackages = "com.erich.yand")
@MapperScan("com.erich.yand.dao")
public class TestApplication {

	public static void main(String[] args) {
		SpringApplication.run(TestApplication.class, args);
	}

}

3.1. @SpringBootApplication看作是 @Configuration、@EnableAutoConfiguration、@ComponentScan 注解的集合

@Configuration:代表这是一个Java配置类
@ComponentScan:扫描被@Component (@Service、@Controller、@Mapper等)注解的 Bean
@EnableAutoConfiguration:启用 SpringBoot 的自动配置机制

3.2. TestApplication.class作为参数传入SpringApplication.run()中,SpringApplication.run()在启动SpringBoot的过程中会根据配置类TestApplication来生成IoC容器。

3.3. @EnableFeignClients 用于启用Feign客户端。Feign是一个声明式的Web服务客户端,可以简化HTTP API的调用。使用@EnableFeignClients注解可以将Feign客户端集成到Spring Boot应用程序中。

里面记录的是Api的的包信息,比如:

public static final String SERVER_API_BASE_PACKAGE = "com.erich.yand.api";

另外需要注意的是,当我们引入外部系统的Api时,也要把外部系统的Api包信息加进来,这样才会把对应的Api注入到容器里。

3.4. @MapperScan是声明扫描Mapper包信息的路径,因为生成Mapper都是借助Mybatis,没有加@Mapper的习惯,所以这里特别声明一下

4.装配Bean到IOC容器

Spring允许我们通过扫描装配Bean到IoC容器中

@Service用于标注业务层组件
@Controller用于标注控制层组件(如struts中的action)
@Repository用于标注数据访问组件,即DAO组件.
@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。

另外,假设我们添加了多数据源,里面有两张表,表名一样,直接注入可能会有冲突,所以我们可以借助@Repository注解区分

@Repository("InvUserMapper")

@Repository("InstUserMapper")

5.依赖注入

当我们使用对象时,可以借助@Autowired、@Resource注解,找到对应的Bean并注入。

@Autowired :按类型

@Qualifier:按名称

@Resource :既可以按名称又可以按类型

另外当我们有多个相同名字的Mapper时,可以用下面这种方式区分
@Resource(name = "InvUserMapper")

以上就是对Spring中 IOC的介绍了~~

### Spring Boot 中的 IoC (控制反转) #### 概念 IoC(Inversion of Control,控制反转)是一种设计原则,在此模式下,对象不会自己创建所依赖的对象实例,而是在运行时通过外部机制提供给它们。这种做法使得组件之间的耦合度降低,并提高了系统的可维护性和灵活性[^1]。 在传统的Java应用程序中,开发者通常会手动管理类及其依赖关系。而在Spring框架里,则是由容器负责管理和组装这些依赖项。具体来说就是把原本由应用代码自行完成的任务交给Spring容器去做,比如对象实例化、属性设置以及方法调用等操作[^2]。 对于Spring Boot而言,其内置了一个自动化的配置过程,能够根据classpath路径下的jar包自动生成相应的Bean定义并注册到ApplicationContext上下文中。因此,在大多数情况下,用户无需显式声明XML文件或者编写大量的`@Configuration`类就能享受到完整的IoC功能支持[^3]。 #### 实现方式 为了实现上述提到的功能,Spring提供了多种途径让开发者向IoC容器注入bean: - **基于注解的方式**:这是最常用的方法之一,主要涉及到如下几个核心注解: - `@Component`: 表明该类是一个Spring管理的组件; - `@Service`, `@Repository`, `@Controller`: 它们都是`@Component`的一个特例形式,用于区分不同层次的服务逻辑层、数据访问层和表现层; - `@Autowired`: 自动装配指定类型的bean作为当前类成员变量或构造函数参数; - `@Value`: 注入简单的字符串或其他基本类型值; ```java @Service public class MyServiceImpl implements MyService { @Autowired private AnotherDependency anotherDependency; public void doSomething() { // ... } } ``` - **基于Java Config的方式**:利用纯Java代码代替XML来进行bean定义,这种方式更加直观易懂且编译期安全。 ```java @Configuration public class AppConfig { @Bean public MyService myService(){ return new MyServiceImpl(); } } ``` #### 应用场景与优势 当面对复杂的业务需求时,采用IoC可以帮助解决以下几个方面的问题: - 减少硬编码带来的风险,提高代码重用率; - 方便测试,因为可以通过Mockito之类的工具轻松替换掉真实的依赖; - 更容易扩展新的特性而不影响现有结构; - 提升性能优化空间,例如懒加载某些重量级资源。 总之,借助于Spring Boot强大的自动化配置能力加上灵活多样的IoC/DI手段,可以让开发人员更专注于业务本身而不是基础设施层面的事情[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值