第五章 spring框架

简介: Spring的IOC(控制反转)将对象创建交给容器管理,避免手动new;DI(依赖注入)则让容器自动注入所需对象。通过@Controller、@Service等注解声明Bean,使用@Autowired或@Resource实现注入。默认单例Bean无并发控制,若无状态则线程安全,否则需自行保证。

谈谈你对Spring lOC与 DI的理解?

Spring的IOC,翻译过来,叫控制反转。指的是在Spring中使用工厂模式,为我们创建了对象,并且将这些对象放在了一个容器中,我们在使用的时候,就不用每次都去new对象了,直接让容器为我们提供这些对象就可以了。 这就是控制反转的思想。
而D1,翻译过来,叫依赖注入。那刚才提到,现在对象已经交给容器管理了,那程序运行时,需要用到某个对象,此时就需要让容器给我们提供,这个过程呢,称之为依赖注入。可能继续追问的问题:
·那如何将一个对象,讲给IOC容器管理呢?
那现在项目开发,都是基于Springboot构建的项目,所以呢,声明bean对象,我们只需要在对应的类上加上注解就可以了。比如:
如果是controller层,直接在类上加上@Controller 或 @RestController 注解
如果是service层,直接在类上加上 @Service 注解:
如果是dao层,直接在类上加上 @Repository注解。当然现在基本都是Mybatis 或 MybatisPlus,所以这个注解很少用了,都用的是 @Mapper 注解。
如果是一些其他的工具类、配置类啊,我们可以通过 @Component、@Configuration 来声明那如何完成依赖注入操作呢? 依赖注入的方式比较多,我们可以使用构造函数注入 或 成员变量输入,也是使用对应的注解就可以了。常用的注解有两个:
@Autowired 和 @Resource 注解。那 @Autowired 默认是根据类型注入,而 @Resource 注解默认是根据名称注入。
Spring容器中的bean是线程安全的吗?
不是线程安全的。
针对于这个问题呢,首先我们知道spring容器的bean默认是单例的。 当多用户同时请求一个服务时,容器会给每个请求分配一个线程,这时多个线程会并发执行该请求对应的业务逻辑,也就是bean对象的业务方法,那如果在业务方法中操作了共享的成员变量,那可能就会存在线程安全问题,
而在Spring框架中并没有对单例bean进行任何多线程的封装处理,关于单例bean的线程安全和并发问题需要我们自行去搞定。但实际上,大部分情况下Spring的bean并没有可变的状态(比如Controller、Service、Dao),所以在某种程度上说Spring的单例bean是线程安全的。
如果说存在这种情况,那就需要开发人员自行保证线程安全。要么,通过编码保证线程安全,要么,设置bean的作用域为 prototype.

相关文章
SAP MM 移动类型107和109之研究
SAP MM 移动类型107和109 之研究 采购订单收货的移动类型,最常见的当属101,102,122以及161。  103和105是一对,用来先收到供应商冻结库存(无价值),然后再用105收到自己的库存里。
4599 0
|
存储 安全 关系型数据库
CentOS7 如何离线安装PostgreSQL数据库
如果CentOS所在的服务器限于安全原因,客户并未给我们配置访问外网的权限,那么如何安装PostgreSQL数据库呢?本文将通过具体步骤来详细讲解如何在CentOS7 系统上离线安装PostgreSQL12数据库。
5218 0
CentOS7 如何离线安装PostgreSQL数据库
|
4月前
|
存储 弹性计算 人工智能
大模型应用开发
大模型应用开发指通过API与大模型交互,构建智能化应用。不同于传统Java开发,其核心在于调用部署在云端或本地的大模型服务。企业可选择开放API、云平台或本地服务器部署,各具成本、安全与性能权衡。本章将详解部署方式与开发实践,助你快速入门。
|
4月前
|
存储 监控 安全
数字货币交易所系统开发架构与安全实施要点
在技术驱动下,数字货币交易所系统开发聚焦安全、性能与合规。本文解析其核心架构、安全防护及技术选型,探讨高并发处理与未来创新方向,为构建可靠交易平台提供实践指南。
|
4月前
|
Java Spring 容器
Spring Boot配置的优先级?
SpringBoot项目支持多种配置方式,主要包括配置文件(application.properties、.yml、.yaml)和外部配置(如系统属性、命令行参数)。优先级由高到低为:命令行参数 > 系统属性 > .properties > .yml > .yaml。自动配置核心是@SpringBootApplication中的@EnableAutoConfiguration,通过@Import导入配置选择器,加载META-INF/spring.factories中定义的自动配置类,并结合@Conditional条件注解按需注入Bean。
|
4月前
|
Java 应用服务中间件 Linux
9、Tomcat优化
Tomcat优化需综合JVM、线程池、网络等多方面。本文以SpringBoot 3.2.3为例,重点解析线程池与网络配置:`max-connections`设最大连接数,`accept-count`控队列长度,`threads.max/min-spare`管线程池大小,默认NIO模式适用于Linux。结合JDK21虚拟线程可进一步提升性能,SpringBoot 3.2.x原生支持,低版本可通过替换线程池实现。
|
消息中间件 存储 大数据
聊一聊几款主流消息队列之间的差异,我们应该如何选择
聊一聊几款主流消息队列之间的差异,我们应该如何选择
1072 2
西门子S7-1200与S7-200的区别有哪些?
今天我们主要来讲一下西门子S7-1200与S7-200的区别有哪些。
西门子S7-1200与S7-200的区别有哪些?
|
开发者
2024 乘风者计划全新启航!快来加入吧!
 2021年,阿里云开发者社区焕新升级,重磅推出“乘风者计划”!诚邀四海技术博主入驻社区,泼墨云间,书写天地。入驻社区,即可享丰厚权益! 新的一年,乘风者计划重磅升级!
252116 81

热门文章

最新文章

下一篇
开通oss服务