Spring IoC / DI

目录

Spring

Spring MVC

Spring Boot

Ioc(控制反转) 和 DI(依赖注入)

Bean

Spring Ioc容器

BeanFactory和ApplicationContext区别 

存储Bean的注解

注入Bean的注解

@Autowired和@Resource的区别

@Autowired三种注入方式的优缺点


 

Spring

Spring 是一个全面的企业级应用开发框架,它提供了IoC和AOP等核心功能,以及事务管理、安全性、数据访问、Web服务等多种功能。Spring是Spring Boot和Spring MVC的基础。

Spring MVC

是Spring框架的一个模块,专为Web应用开发设计。它遵循MVC(Model-View-Controller)设计模式,利用Spring的核心特性(如IoC和DI)来分离Web层的组件,使得代码结构清晰,更易于测试和维护。

Spring Boot

Spring Boot是对Spring的⼀个封装, 为了简化Spring应⽤的开发⽽出现的,中⼩型企业,没有成本研究⾃⼰的框架, 使⽤Spring Boot 可以更加快速的搭建框架, 降级开发成本, 让开发
⼈员更加专注于Spring应⽤的开发,⽽⽆需过多关注XML的配置和⼀些底层的实现.

Spring MVC和Spring Boot都属于Spring,Spring MVC 是基于Spring的⼀个 MVC 框架,⽽Spring Boot 是基于Spring的⼀套快速开发整合包.

Ioc(控制反转) 和 DI(依赖注入)

  • IoC是一种设计思想,其核心理念是将对象的创建、管理以及依赖关系的建立等控制权从代码中转移到外部容器(如Spring IoC容器)中。这样做的好处是可以降低代码之间的耦合度,提高代码的可维护性和可扩展性。
  • DI是IoC的一种实现方式,它是指在程序运行过程中,由IoC容器动态地将依赖对象注入到组件中。这样,组件只需要声明依赖,而不需要关心依赖对象的创建和获取过程。Spring框架通过Bean来实现DI,Bean是被Spring IoC容器管理的对象实例

Bean

在Spring框架中,Bean是一个核心概念,它是指被Spring IoC容器实例化、配置和管理的对象。这些对象可以是任何Java类,但通常需要遵守一定的规范(如提供无参构造方法、setter方法等),以便Spring IoC容器能够正确地创建和注入它们1

Spring Ioc容器

Spring Ioc容器是Spring框架的核心,负责自动创建、管理(包括依赖注入)和配置对象(Beans),实现控制反转,降低组件间的耦合度。

Spring提供了两个主要的IoC容器:BeanFactoryApplicationContext

BeanFactoryApplicationContext区别 

  • ApplicationContextBeanFactory的子接口,提供了更多的功能,如国际化支持、事件传播等
  • ApplicationContext一次性加载并初始化所有Bean对象(饿汉)
  • BeanFactory是要哪个才去加载哪个(懒汉)

存储Bean的注解

可以将Bean注入到 Spring 中的注解

@Controller / @Service /@Repository/ @Configuration / @Component 

这些注解用于标记类为Spring容器管理的Bean。

它们分别对应了不同的层次(控制层、服务层、数据访问层、组件)最后两个都是组件,一般不区分常用第五个


注入Bean的注解

  • @Autowired:这是Spring中最常用的注入注解,它可以用于属性、构造函数和setter方法上。Spring容器会自动寻找匹配的Bean进行注入。如果容器中存在多个相同类型的Bean,则可能需要使用@Qualifier注解来指定注入哪一个Bean。
    • @Qualifier:这个注解通常与@Autowired一起使用,用于在存在多个相同类型Bean的情况下,指定注入哪一个Bean。

  • @Resource:这也是一个注入注解,来源于JDK提供的。包括按名称注入和按类型注入。当需要明确指定Bean的名称时,@Resource是一个很好的选择。

@Autowired和@Resource的区别

  1. 来源不同:@Autowired 是 Spring 框架提供的注解;而 @Resource 来自JDK提供的
  2. 查找顺序不同:@Autowired 默认按照类型查找依赖,如果存在多个相同类型的 Bean,则根据名称查找;@Resource 默认按照名称查找,如果找不到,则按照类型查找。
  3. 依赖注入支持不同:@Autowired 支持属性注入、构造方法注入和 Setter 注入等多种注入方式;而 @Resource 主要支持属性注入和 Setter 注入

@Autowired三种注入方式的优缺点

  • 属性注⼊
    • 优点: 简洁,使⽤⽅便;
    • 缺点: 只能⽤于 IoC 容器,如果是⾮ IoC 容器不可⽤,并且只有在使⽤的时候才会出现 NPE(空指 针异常) 不能注⼊⼀个Final修饰的属性
  • 构造函数注⼊(Spring 4.X推荐)
    • 优点: 可以注⼊final修饰的属性 注⼊的对象不会被修改 依赖对象在使⽤前⼀定会被完全初始化,因为依赖是在类的构造⽅法中执⾏的,⽽构造⽅法是在类加载阶段就会执⾏的⽅法. 通⽤性好, 构造⽅法是JDK⽀持的, 所以更换任何框架,他都是适⽤的
    • 缺点: 注⼊多个对象时, 代码会⽐较繁琐
  • Setter注⼊(Spring 3.X推荐)
    • 优点: ⽅便在类实例之后, 重新对该对象进⾏配置或者注⼊
    • 缺点: 不能注⼊⼀个Final修饰的属性 注⼊对象可能会被改变, 因为setter⽅法可能会被多次调⽤, 就有被修改的⻛险

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值