深入解析Spring基本概念和核心思想

简介: 深入解析Spring基本概念和核心思想

文章目录

基本概念

IoC

Ioc容器

IoC理解

IoC的步骤

Spring中使用ioc的步骤

Aop

Aop的理解

Aop的步骤

控制反转

谁控制谁? 控制什么?为何叫反转(对应于正向)?哪些方面反转了?为何需要反转?

依赖

什么是依赖(按名称理解、按动词理解)? 谁依赖于谁? 为什么需要依赖? 依赖什么东西?

注入

谁注入于谁? 注入什么东西? 为何要注入?

依赖注入和控制反转是同一概念吗

IoC/DI是什么

IoC/DI是什么?能做什么?怎么做?用在什么地方?

什么是外部资源

数据访问

Wed开发

基本概念

  1. 使用spring后,被spring管理的类,不需要再new。
  2. 要想类被spring管理,则需要通过bean的方式,把类引入到spirng的配置文件中。

IoC

Ioc容器

简单的理解就是: 实现IoC思想,并提供对象创建,对象装配以及对象生命周期管理的软件就是Ioc容器


IoC理解

  1. 应用程序无需主动new对象,而是描述对象如何被创建
  2. 应用程序不需要主动装配对象之间的依赖关系,而是描述需要那个服务,IoC容器会帮你装配,被动接受装配
  3. 主动变被动,是一种让服务消费者不一直接依赖于服务提供者的组件设计方式,是一种减少类与类之间依赖的设计原则

IoC的步骤

Spring的主要通过bean标签来实现IOC。

<!-- id属性给这个bean指定一个唯一的名,供spring的其他组件来引用 
     class属性指定bean的全路径
-->
<bean id="hello" class="com.hello.Hello">
   <!--property通过set方法给对应的属性设置值
       value属性可以直接设置值
       ref属性引用其他的组件
   -->
   <property name="who" value="t6041"></property>
   <property name="ink" ref="inkColor"></property>
</bean>

Spring中使用ioc的步骤

创建类

通过bean标签把bean放到spring中

初始化spring配置文件拿到spring的上下文,通过spring的上下文获取对应的bean。

Aop

Aop的理解

将复杂的要求分解出不同方面,将散布在系统中的"公共功能" “集中解决”

采用代理机制组装起来运行,在 “不改变源程序” 的基础上对代码段进行增强处理,增加新的功能


Aop的步骤

1.创建一个增强。并纳入spring的容器中。使普通类变成增强。

  • 使用类似aop:before标签把普通变成增强
  • 实现BeforeAdvice接口也可以把普通类变成增强
<bean id="loggerAdvice" class="com.advice.LoggerAdvice"></bean>

2.创建切入点

<aop:pointcut expression="execution(public void print())" id="pointcut"/>

3.定义切面。包涵增强的方法和切入点。

<aop:aspect ref="loggerAdvice">
    <aop:before method="before" pointcut-ref="pointcut"/>
</aop:aspect>

控制反转

谁控制谁? 控制什么?为何叫反转(对应于正向)?哪些方面反转了?为何需要反转?

  1. 谁控制谁? -->loC/DI容器控制应用程序
  2. 控制什么? -->IoC/DI容器控制对象本身的创建、实例化; IoC/DI容器控制对象之间的依赖关系
  3. 为何叫反转(对应于正向)? -->因为现在应用程序不能主动去获取外部资源了,而是被动等待IoC/DI容器给它注入它所需要的资源,所以称为反转
  4. 那些方面反转了? -->1.创建对象 2.程序获取资源的方式反了
  5. 为何需要反转? -->1引入IoC/DI容器过后体系更为松散,而且管理更有序; 2.类之间真正实现了松散耦合

依赖

什么是依赖(按名称理解、按动词理解)? 谁依赖于谁? 为什么需要依赖? 依赖什么东西?

  1. 什么是依赖(按名称理解、按动词理解)? -->依赖(按名理解):依赖关系; 依赖(按动词理解)依赖的动作
  2. 谁依赖谁? -->应用程序依赖于IoC/DI容器
  3. 为什么需要依赖? -->因为发生了反转,应用程序依赖的资源都是IoC/DI容器里面
  4. 依赖什么东西? -->应用程序依赖于IoC/DI容器,依赖IoC/DI容器为它注入所需的资源

注入

谁注入于谁? 注入什么东西? 为何要注入?

  1. 谁注入于谁? -->IoC/DI容器注入于应用程序
  2. 注入什么东西? -->注入应用程序需要的外部资源,比如关系依赖
  3. 为何要注入? -->因为程序要正常运行需要这些外部资源

依赖注入和控制反转是同一概念吗

不是同一概念,其实他们两个描述的是同一件事件,但是是从不同角度来说: 控制反转从IoC/DI容器的角度; 依赖注入是从应用程序的角度


  1. 控制反转的描述: IoC/DI容器反过来控制应用程序,控制应用程序所需要的外部资源(比如: 外部资源)
  2. 依赖注入描述: 应用程序依赖IoC/DI容器,依赖注入他所需的外部资源

IoC/DI是什么

IoC/DI是什么?能做什么?怎么做?用在什么地方?

1.IoC/DI是什么

  • IoC: 就是使用IoC/DI容器反过来控制应用程序所需要的外部资源,这样的一种程序开发思想
  • DI: 就是应用程序依赖IoC/DI容器来注入所需的外部资源,这样一种程序开发的思想

2.能做什么 -->松散耦合对象

3.怎么做 -->使用Spring框架,里面有实现好了的IoC/DI容器

4.用在什么地方 -->凡是程序里面需要外部资源的情况,都可以考虑使用IoC/DI容器

什么是外部资源

对于一个类来讲,所谓的外部资源,就是指在自己类不能得到或实现的东西,比如说: 在一个类里面要读取配置文件,那么这个配置文件就相当于这个类的外部资源,又比如: A类里面调用B类,那么对于A类来讲B类就是外部资源


数据访问

Spring提供了对各种数据访问技术的支持,包括JDBC、ORM(对象关系映射)框架(如Hibernate、MyBatis)、事务管理等。它提供了一种统一的访问数据的方式,并且可以方便地切换或组合不同的数据访问技术。


  1. JDBC:Spring提供了JdbcTemplate类来简化JDBC操作,包括连接管理、异常处理和事务管理等
  2. ORM(对象关系映射):Spring提供了对ORM框架的集成支持,包括Hibernate、JPA、MyBatis等。通过Spring的ORM支持,可以更方便地进行数据库操作,不需要编写繁琐的数据库访问代码
  3. 事务管理:Spring提供了对事务的封装和管理,包括编程式事务和声明式事务两种方式。通过使用Spring的事务管理支持,可以简化事务的使用,提高代码的可维护性和可读性。
  4. 数据库连接池:Spring提供了对常见数据库连接池的集成支持,例如C3P0、HikariCP等。通过使用Spring的数据库连接池,可以更高效地管理连接资源,提高应用的性能和可扩展性。
  5. NoSQL数据库:Spring提供了对一些NoSQL数据库的集成支持,例如MongoDB、Redis等。通过Spring的支持,可以更方便地操作这些NoSQL数据库,实现数据的持久化和缓存。

Wed开发

Web是Spring框架中用于开发Web应用程序的模块。它提供了一组功能强大的类和工具,用于简化Web应用程序的开发和管理。


  1. MVC(模型-视图-控制器)架构:Spring Web提供了基于MVC架构的Web框架,通过定义和组织控制器、视图和模型,使得开发人员可以更容易地实现业务逻辑和界面交互的分离。
  2. 请求处理:Spring Web提供了多种方式来处理HTTP请求,包括基于注解的请求映射、路径变量、请求参数的绑定、请求验证和错误处理等。开发人员可以根据具体需求选择最合适的请求处理方式。
  3. 视图渲染:Spring Web支持多种视图技术,包括JSP、Thymeleaf、Freemarker等,开发人员可以根据具体需求选择合适的视图渲染方式。
  4. 表单处理:Spring Web提供了表单处理的支持,包括表单数据的绑定、验证、错误处理和表单重复提交的防御等。


相关文章
【期末不挂科-单片机考前速过系列P7】(第七章:11题速过串行口基本概念/结构/工作方式/双机通信例题)经典例题盘点(带图解析)
【期末不挂科-单片机考前速过系列P7】(第七章:11题速过串行口基本概念/结构/工作方式/双机通信例题)经典例题盘点(带图解析)
|
12天前
|
安全 Java 测试技术
Spring Boot集成支付宝支付:概念与实战
【4月更文挑战第29天】在电子商务和在线业务应用中,集成有效且安全的支付解决方案是至关重要的。支付宝作为中国领先的支付服务提供商,其支付功能的集成可以显著提升用户体验。本篇博客将详细介绍如何在Spring Boot应用中集成支付宝支付功能,并提供一个实战示例。
35 2
|
12天前
|
Java 关系型数据库 数据库
Spring Boot多数据源及事务管理:概念与实战
【4月更文挑战第29天】在复杂的企业级应用中,经常需要访问和管理多个数据源。Spring Boot通过灵活的配置和强大的框架支持,可以轻松实现多数据源的整合及事务管理。本篇博客将探讨如何在Spring Boot中配置多数据源,并详细介绍事务管理的策略和实践。
36 3
|
3天前
|
JavaScript Java 开发者
Spring Boot中的@Lazy注解:概念及实战应用
【4月更文挑战第7天】在Spring Framework中,@Lazy注解是一个非常有用的特性,它允许开发者控制Spring容器的bean初始化时机。本文将详细介绍@Lazy注解的概念,并通过一个实际的例子展示如何在Spring Boot应用中使用它。
16 2
|
11天前
|
XML Java API
Spring Boot 整合 LiteFlow 规则引擎:概念与实战
【4月更文挑战第30天】在现代软件开发中,规则引擎允许我们以声明式的方式定义业务逻辑和决策路径。LiteFlow 是一个轻量级、易于使用的组件式规则引擎,它可以与 Spring Boot 应用无缝整合。本文将介绍如何在 Spring Boot 项目中引入 LiteFlow,实现灵活的业务流程管理。
29 0
|
12天前
|
安全 Java 测试技术
利用Java反射机制提高Spring Boot的代码质量:概念与实战
【4月更文挑战第29天】Java反射机制提供了一种强大的方法来在运行时检查或修改类和对象的行为。在Spring Boot应用中,合理利用反射可以提高代码的灵活性和可维护性。本篇博客将探讨Java反射的核心概念,并展示如何通过反射提高Spring Boot项目的代码质量。
28 0
|
12天前
|
监控 Java 测试技术
Spring Boot与事务钩子函数:概念与实战
【4月更文挑战第29天】在复杂的业务逻辑中,事务管理是确保数据一致性和完整性的关键。Spring Boot提供了强大的事务管理机制,其中事务钩子函数(Transaction Hooks)允许开发者在事务的不同阶段插入自定义逻辑。本篇博客将详细探讨事务钩子函数的概念及其在Spring Boot中的应用。
34 1
|
12天前
|
安全 Java 数据安全/隐私保护
Spring Boot优雅实现多租户架构:概念与实战
【4月更文挑战第29天】在多租户系统中,一个应用实例服务于多个租户,每个租户享有独立的数据视图,而应用的基础设施被共享。这样的架构不仅优化了资源使用,还能降低维护和运营成本。本文将详细介绍如何在Spring Boot中实现多租户架构,并提供具体的实战案例。
38 2
|
12天前
|
前端开发 Java 数据安全/隐私保护
Spring Boot使用拦截器:概念与实战
【4月更文挑战第29天】拦截器(Interceptors)在Spring Boot应用中常用于在请求处理的前后执行特定的代码,如日志记录、认证校验、权限控制等。本篇博客将详细介绍Spring Boot中拦截器的概念及其实战应用,帮助开发者理解和利用拦截器来增强应用的功能。
27 0
|
13天前
|
监控 Java Sentinel
Spring Cloud Sentinel:概念与实战应用
【4月更文挑战第28天】在分布式微服务架构中,确保系统的稳定性和可靠性至关重要。Spring Cloud Sentinel 为微服务提供流量控制、熔断降级和系统负载保护,有效预防服务雪崩。本篇博客深入探讨 Spring Cloud Sentinel 的核心概念,并通过实际案例展示其在项目中的应用。
23 0

推荐镜像

更多