文章目录

  • Spring
    • 1、Spring是什么,为什么要使用Spring?
      • 1.常见的配置方式有三种:
      • 2.Spring 框架七大核心模块
      • 3.Spring 的优点?
    • 2、Spring IoC 容器的理解
      • 1.Ioc 是什么?
      • 2.IoC 和 DI
      • 3.SpringBean
      • 4.SpringBean 作用域
      • 5.SpringBean 生命周期
    • 3、Spring AOP 的理解
      • 1.Spring AOP三种使用方式
      • 2.Apring AOP的实现原理
        • 2.1 使用 JDK 动态代理
        • 2.2 CGLIB 代理
        • 2.3 二者优缺点

Spring

学习链接:https://www.w3cschool.cn/wkspring/pesy1icl.html

1、Spring是什么,为什么要使用Spring?

Spring 是一个轻量级的 IoCAOP 容器框架。是提供基础性服务的一套框架,目的是简化企业应用程序的开发,使开发者只需要关心业务需求。

  • IoC 容器会管理依赖的对象,不需要自己创建和管理依赖对象了,让相互协作的组件保持松散的耦合

  • AOP 编程允许把遍布于应用各层的功能分离出来形成可重用的功能组件,更方便处理某一类问题

  • spring 提供了事务支持,使得事务操作变的更加方便。

  • 方便框架集成,spring 可以很方便的集成第三方框架,比如 MyBatishibernate 等。

1.常见的配置方式有三种:

  • 基于**XML**的配置:Bean 所需的依赖项和服务在 XML 格式的配置文件中指定。这些配置文件通常包含许多 <bean/>节点的定义和特定于应用程序的配置选项

  • 基于**Java 注解**的配置:

    • 使用组件扫描可以不必在 Spring 的配置文件中配置各个<bean/>节点。
    • 通过在相关的类、方法或字段声明上使用注解,将 Bean 配置为组件类本身,而不是使用 XML 来描述 Bean 装配。
    • 注意:默认情况下,Spring 容器中未打开注解装配,使用它之前在Spring 配置文件中启用它。
  • 基于类的 Java Config

    • 通过类定义 Spring 配置元数据,直接消除 XML 配置文件
    • 通过使用 @Bean@Configuration 来实现。
    • @Bean 注解扮演与 <bean /> 元素相同的角色。用到方法上,表示当前方法的返回值是一个bean
    • @Configuration 类允许通过简单地调用同一个类中的其他 @Bean 方法来定义 Bean 间依赖关系。相当于 spring 的配置文件 XML

这几种方式没有什么所谓的优劣之分,主要看使用情况,一般来说是这样:

  • 涉及到全局配置的,例如数据库相关配置、MVC 相关配置等,就用 Java Config 配置的方式
  • 涉及到业务配置的,就使用注解方式

2.Spring 框架七大核心模块

  • spring core 容器模块:框架最基础部分,提供 IoCDI依赖注入特性。

    • 依赖注入实现容器对Bean的管理,核心容器的主要组件是 BeanFactoryBeanFactory工厂模式的一个实现,是任何Spring 应用的核心。
    • IoC 将应用配置和依赖从实际的应用代码中分离出来
  • spring context 应用上下文模块:扩展了 BeanFactory 的概念

    • 核心模块的 BeanFactory 使 Spring 成为一个容器,而上下文模块使它成为一个框架。
    • 提供了许多企业服务
  • spring aop AOP模块:提供面向切面的编程实现,可自定义拦截器、切点、日志等。

    • Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务
    • 通过使用 Spring AOP,不用依赖组件,就可以将声明性事务管理集成到应用程序中
  • spring dao JDBC抽象和DAO模块:提供了JDBC 的抽象层和异常层次结构。消除了冗长的 JDBC 编码和对数据库供应商特定错误代码的解析。

  • spring orm 对象/关系映射集成模块:

  • spring web Web模块:Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文,提供了Spring和其它 Web 框架的集成

  • spring mvc MVC模块:Spring 为构建 Web 应用提供了一个功能全面的 MVC 框架,SpringMVC 框架使用 IoC 对控制逻辑和业务对象提供了完全的分离

3.Spring 的优点?

(1)Spring属于低侵入设计,代码污染极低;

(2)控制反转:IOC——Inversion of Control,指的是将对象的创建权交给 Spring 去创建。使用 Spring 之前,对象的创建都是由我们自己在代码中new创建。而使用Spring 之后。对象的创建都是给了 Spring 框架。

(3)SpringDI机制将对象之间的依赖关系交由框架处理,减低组件的耦合性;

(4)面向切面编程:Spring提供了AOP技术,支持将一些通用任务,如安全、事务、日志、权限等进行集中式管理,从而提供更好的复用;

(5)容器:Spring 是一个容器,因为它包含并且管理应用对象的生命周期

(6)组件化:Spring 实现了使用简单的组件配置组合成一个复杂的应用。在 Spring 中可以使用 XMLJava 注解组合这些对象。

(7)一站式:在 IOCAOP 的基础上可以整合各种企业应用的开源框架和优秀的第三方类库(实际上 Spring 自身也提供了表现层的 SpringMVC 和持久层的 Spring JDBC

**Spring的特点:**轻量级、控制反转、面向切面、容器化、框架集合

2、Spring IoC 容器的理解

IoC 就是为了解决程序中耦合度太高的问题

1.Ioc 是什么?

Ioc (Inversion of Controll 控制反转),它不是一种技术,而是一种设计思想

  • 控制,谁控制谁,控制什么?

    • IoC 容器控制对象
    • 主要是控制外部资源获取(不只是对象,比如文件)
  • 反转,哪些方面反转了?

    • 由容器查找及注入依赖对象,对象只是被动的接受依赖对象,依赖对象的获取被反转了
  • 传统应用程序示意图

  • IoC/DI 容器后程序结构示意图

IoC对编程带来的最大改变不是从代码上,而是从思想上,发生了“主从换位”的变化。应用程序原本是老大,要获取什么资源都是主动出击,但是在IoC/DI思想中,应用程序就变成被动的了,被动的等待IoC容器来创建并注入它所需要的资源了。

2.IoC 和 DI

DI—Dependency Injection,即“依赖注入”由容器动态的将某个依赖关系注入到组件之中依赖注入的目的并非为软件系统带来更多功能,而是为了提升组件重用的频率,并为系统搭建一个灵活、可扩展的平台。

  • 谁依赖谁:应用程序依赖于IoC容器
  • 为什么需要依赖:应用程序需要Ioc容器来提供对象需要的外部资源
  • 谁注入谁:IoC容器注入应用程序某个对象(应用程序所依赖的对象)
  • 注入了什么:注入某个对象所需要的外部资源(包括对象、资源、常量数据)

二者关系:

  • 控制反转(IoC)是一个通用的概念,它可以用许多不同的方式去表达,依赖注入仅仅是控制反转的一个具体的例子。
  • 它们是同一个概念的不同角度描述
  • IoC的一个重点是在系统运行中,动态的向某个对象提供它所需要的其他对象。这一点是通过DI(Dependency Injection,依赖注入)来实现的

Spring 提供了以下两种不同类型的容器:

  • Spring BeanFactory 容器

    • 一个最简单的容器,它主要的功能是为依赖注入提供支持,这个容器接口在 org.springframework.beans.factory.BeanFactory 中被定义。在资源宝贵的移动设备或者基于 applet 的应用当中, BeanFactory 会被优先选择。
    • 最常被使用的是 XmlBeanFactory 类。
  • Spring ApplicationContext 容器
    • BeanFactory 的子接口包含 BeanFactory 所有的功能,也被称为 Spring 上下文,是 spring 中较高级的容器。
    • 最常被使用的 ApplicationContext 接口实现:
      • FileSystemXmlApplicationContext:该容器从 XML文件中加载已被定义的 bean。在这里,你需要提供给构造器 XML 文件的完整路径。
      • ClassPathXmlApplicationContext:该容器从 XML 文件中加载已被定义的 bean。在这里,你不需要提供 XML 文件的完整路径,只需正确配置 CLASSPATH 环境变量即可,因为,容器会从 CLASSPATH 中搜索 bean 配置文件。
      • XmlWebApplicationContext:该容器会在一个 web 应用程序的范围内加载在 XML 文件中已被定义的 bean

3.SpringBean

称作 bean 的对象是构成应用程序的支柱也是一个被实例化、组装、并通过 Spring IoC 容器所管理的对象。这些 bean 是由用容器提供的配置元数据创建的。

BeanSpring 容器的关系

4.SpringBean 作用域

Spring 框架支持以下五个作用域,分别为 singleton、prototype、request、session 和 global session

5.SpringBean 生命周期

当一个 bean 被实例化时,它可能需要执行一些初始化使它转换成可用状态。同样,当 bean 不再需要,并且从容器中移除时,可能需要做一些清除工作。

  • Bean的生命周期可以表达为:Bean的定义——Bean的初始化——Bean的使用——Bean的销毁
  • 详细介绍待后续…

3、Spring AOP 的理解

  • AOP (面向切面编程),是一种编程思想,是面向对象编程的一种补充,面向切面编程,实现在不修改源代码的情况下给程序动态统一添加额外功能的一种技术

  • OOP 面向对象编程,允许开发者定义纵向的关系,但并不适用于定义横向的关系,导致了大量代码的重复,而不利于各个模块的重用。

  • AOP 用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块被命名为“切面”(Aspect),减少系统中的重复代码,降低了模块间的耦合度,同时提高了系统的可维护性。

  • OOP 中模块化的关键单元是类,而在 AOP 中模块化的关键单元是方面。AOP 帮助你将横切关注点从它们所影响的对象中分离出来,然而依赖注入帮助你将你的应用程序对象从彼此中分离出来。

  • 利用 AOP 可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。AOP 能够让我们在不影响原有功能的前提下,为软件横向扩展功能

  • 主要功能:可用于权限控制、日志管理、事务、日志处理。

1.Spring AOP三种使用方式

  • AOP 编程三步:

    • 定义普通话业务组建
    • 定义切入点,一个切入点可能横切多个业务组建
    • 定义增强处理,增强处理就是在AOP 框架为普通业务组件织入的处理动作
    • 进行AOP编程的关键就是定义切入点和定义增强处理,一旦定义了合适的切入点和增强处理,AOP框架将自动生成AOP代理,即:代理对象的方法=增强处理+被代理对象的方法。
  • 方式一:使用Spring自带的AOP
  • 方式2:使用Aspectj实现切面(普通POJO的实现方式)
  • 方式3:使用Aspectj实现切面(基于注解的实现方式)

2.Apring AOP的实现原理

AOP 的实现是基于代理模式来实现的,AOP 代理主要分为静态代理和动态代理。一般采用动态代理两种混合的实现方式:JDK 动态代理和 `CGLIB 动态代理。实际上

  • JDK 动态代理:Spring AOP的首选方法。 每当目标对象实现一个接口时,就会使用 JDK 动态代理。目标对象必须实现接口
  • CGLIB 代理:如果目标对象没有实现接口,则可以使用 CGLIB 代理。

2.1 使用 JDK 动态代理

  • 组件一:InvocationHandler 接口

    • 首先编写一个类,去实现该接口,重写invoke()(提供的代理方法)
  • 组件二:Proxy
    • 通过使用该类的newProxyIntance()方法,返回一个代理对象
  • 然后通过代理对象调用方法时,底层将通过反射,调用我们实现的InvocationHandler 接口中的invoke()

2.2 CGLIB 代理

Cglib 是一个强大的、高性能的代码生成库,它广泛被许多AOP框架使用,提供方法的拦截,如下图所示CglibSpring等应用的关系:

Cglib 的实现是在字节码的基础上的,并且使用了开源的 ASM 读取字节码,对类实现增强功能的。

2.3 二者优缺点

  • JDK 动态代理

    • 优点

      • JDK 动态代理是 JDK 原生的,不需要任何依赖即可使用;
      • 通过反射机制生成代理类的速度要比 CGLib 操作字节码生成代理类的速度更快;
    • 缺点
      • 要使用 JDK 动态代理,被代理的类必须实现了接口,否则无法代理;
      • JDK 动态代理执行代理方法时需要通过反射机制进行回调,此时方法执行的效率比较低
      • JDK 动态代理无法为没有在接口中定义的方法实现代理。假设我们有一个实现了接口的类,我们为它的一个不属于接口中的方法配置了切面,Spring 仍然会使用默认JDK动态代理,但是由于配置了切面的方法不属于接口,为这个方法配置的切面将不会被织入。

浅浅浅学 Spring 基基基础相关推荐

  1. 中职学校计算机应用基础学什么,浅谈中职学校《计算机应用基础》课程改革的一点建议...

    <浅谈中职学校<计算机应用基础>课程改革的一点建议>由会员分享,可在线阅读,更多相关<浅谈中职学校<计算机应用基础>课程改革的一点建议(3页珍藏版)>请 ...

  2. 高职院校计算机基础课程要求,浅谈高职院校计算机的应用基础课程的改革.doc...

    浅谈高职院校计算机的应用基础课程的改革 浅谈高职院校计算机的应用基础课程的改革 摘要:本文就改革计算机基础教学进行了初步探讨,提出了教学分班.项目教学等改革方案,着重培养学生的思维.操作能力. 关键词 ...

  3. 任务驱动在计算机教学中的应用,浅谈任务驱动法在《计算机应用基础》教学中的应用_优秀论文...

    <浅谈任务驱动法在<计算机应用基础>教学中的应用_优秀论文>由会员分享,可在线阅读,更多相关<浅谈任务驱动法在<计算机应用基础>教学中的应用_优秀论文(8页珍 ...

  4. Spring MVC浅入浅出——不吹牛逼不装逼

    Spring MVC浅入浅出--不吹牛逼不装逼 前言 上文书说了Spring相关的知识,对Spring来了个浅入浅出,大家应该了解到,Spring在三层架构中主做Service层,那还有Web层,也就 ...

  5. Spring的数据库编程浅入浅出——不吹牛逼不装逼

    Spring的数据库编程浅入浅出--不吹牛逼不装逼 前言 上文书我写了Spring的核心部分控制反转和依赖注入,后来又衔接了注解,在这后面本来是应该写Spring AOP的,但我觉得对于初学者来说,这 ...

  6. Spring浅入浅出——不吹牛逼不装逼

    Spring浅入浅出--不吹牛逼不装逼 前言: 今天决定要开始总结框架了,虽然以前总结过两篇,但是思维是变化的,而且也没有什么规定说总结过的东西就不能再总结了,是吧.这次总结我命名为浅入浅出,主要在于 ...

  7. 计算机在旅游方面的应用,浅谈旅游专业在《计算机应用基础》设计中的思考

    <浅谈旅游专业在<计算机应用基础>设计中的思考>由会员分享,可在线阅读,更多相关<浅谈旅游专业在<计算机应用基础>设计中的思考(6页珍藏版)>请在人人文 ...

  8. 微积分学在计算机科学中的应用,浅谈微积分学在中学数学教学中的应用解答.doc...

    题 目 浅谈微积分学在中学数学教学中的应用 学生姓名 何凯茜 学号 1109014004 所在学院 数学与计算机科学学院 专业班级 数学与应用数学专业数教1101班 指导教师 权双燕 完成地点 陕西理 ...

  9. Spring注解浅入浅出——不吹牛逼不装逼

    Spring注解浅入浅出--不吹牛逼不装逼 前情提要 上文书咱们说了<Spring浅入浅出>,对Spring的核心思想看过上篇的朋友应该已经掌握了,此篇用上篇铺垫,引入注解,继续深入学习. ...

  10. **浅谈STM32系列单片机的零基础学习方法**

    浅谈STM32系列单片机的零基础学习方法 *很多朋友想必在零基础学习STM32F1这系列单片机时会感觉无从下手,或者不知道写程序时到底是用库函数好还是寄存器好.* 我个人认为一个零基础的朋友可以通过以 ...

最新文章

  1. HDU 4630 No Pain No Game 树状数组+离线操作
  2. 拼接字符串的两种方式
  3. Spring事务“套路”面试
  4. Hibernate基本概念 (2)
  5. http协议的状态码400,401,403,404,500,502,503,301,302等常见网页错误代码
  6. 作业,输入名字密码,按dict插入到list,非法字符显示*
  7. 返回结果乱码_Spring请求参数和响应结果全局加密和解密(1)
  8. wcf afterreceiverequest获取body数据_阿里面试官的灵魂拷问:究竟如何保证API接口数据安全?...
  9. “光伏热”背后存隐忧 竞价上网倒逼产业升级
  10. 算法:回溯三 Combination Sum组合总数
  11. Python中常见的模块
  12. Axure RP Extension for Chrome的安装
  13. Android传感器、语音识别、定位系统、Google Map API、快捷方式、widget编程总结及示例
  14. STL浅析 RB-tree(红黑树)
  15. adb 卸载android系统程序
  16. 世界顶级思维(必须收藏)
  17. 华为手机鸿蒙系统有什么优点和缺点,有多少人愿意亲身体验鸿蒙系统?华为自研系统,有哪些优势?...
  18. HDU-2545 树上战争
  19. word导出数据(tp5)
  20. 嵌入式软件工程师就业方向有哪些呢?

热门文章

  1. 苹果电脑MacOS连接使用移动硬盘
  2. Python获取文件哈希md5、sha256、sha512等方法
  3. activiti5入门(四)流程图之六大构成元素
  4. 分享 :统计学概论和医疗临床大数据分析(附PPT下载)
  5. 基于Java健身房管理系统设计实现(源码+lw+部署文档+讲解等)
  6. 你以为这些工作事少钱多?痛得我想转行!
  7. 摘:轻而易举拥有xp风格的界面
  8. 手机 行货,水货与港货的区别
  9. a++ ++a 自增和自减
  10. 【gazebo中加载DEM高程图】