Spring知识点总结

本文详细介绍了Spring框架的核心特性,包括Spring的分层结构、优势,重点解析了IOC(控制反转)和DI(依赖注入)的概念,阐述了工厂模式在解耦中的作用,并探讨了AOP(面向切面编程)的基本原理。通过理解这些核心概念,有助于深入掌握Spring框架并提升开发效率。
摘要由CSDN通过智能技术生成

一、Spring框架介绍

Spring 是分层的 Java SE/EE 应用 full-stack 轻量级开源框架,以 IoC(Inverse Of Control:反转控制)和 AOP(Aspect Oriented Programming:面向切面编程)为内核,提供了展现层 Spring MVC 和持久层 Spring JDBC 以及业务层事务管理等众多的企业级应用技术,还能整合开源世界众多著名的第三方框架和类库。

spring的优势

(1)方便解耦,简化开发       

        通过 Spring 提供的 IoC 容器,可以将对象间的依赖关系交由 Spring 进行控制,避免硬编码所造成的过度程序耦合。

(2)AOP 编程的支持

        通过 Spring AOP 功能,方便进行面向切面的编程,许多不容易用传统 OOP 实现的功能可以通过 AOP 轻松应付。

(3)声明式事务的支持

(4)方便程序的测试

(5)方便集成各种优秀框架

spring的体系结构

二、IOC和DI

  • 什么是程序的耦合

耦合性(Coupling),也叫耦合度,是对模块间关联程度的度量。耦合的强弱取决于模块间接口的复杂性、调用模块的方式以及通过界面传送数据的多少。模块间的耦合度是指模块之间的依赖关系,包括控制关系、调用关系、数据传递关系。模块间联系越多,其耦合性越强,同时表明其独立性越差( 降低耦合性,可以提高其独立)。在软件工程中,耦合指的就是对象之间的依赖性。对象之间的耦合越高,维护成本越高。因此对象的设计应使类和构件之间的耦合最小。软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准。划分模块的一个准则就是高内聚低耦合。

内聚与耦合

    内聚标志一个模块内各个元素彼此结合的紧密程度,它是信息隐蔽和局部化概念的自然扩展。内聚是从功能角度来度量模块内的联系,一个好的内聚模块应当恰好做一件事。它描述的是模块内的功能联系。耦合是软件结构中各模块之间相互连接的一种度量,耦合强弱取决于模块间接口的复杂程度、进入或访问一个模块的点以及通过接口的数据。 程序讲究的是低耦合,高内聚。就是同一个模块内的各个元素之间要高度紧密,但是各个模块之间的相互依存度却要不那么紧密。

内聚和耦合是密切相关的,同其他模块存在高耦合的模块意味着低内聚,而高内聚的模块意味着该模块同其他模块之间是低耦合。在进行软件设计时,应力争做到高内聚,低耦合。

  • IOC控制反转

在我们的开发中,有些依赖关系是必须的,有些依赖关系可以通过优化代码来解除。

例:业务层调用持久层,此时业务层依赖持久层的接口和实现类,如果此时缺少持久层实现类,编译将无法通过。这种编译期依赖关系是我们应该杜绝的。

工厂模式解耦

工厂就是负责给我们从容器中获取指定对象的类。这时候我们获取对象的方式发生了改变。

在应用加载时,创建一个Map,用于存放三层对象。

原来:我们在获取对象时,都是采用 new 的方式。是主动的。

现在:我们获取对象时,同时跟工厂要,有工厂为我们查找或者创建对象。是被动的。

  • 概念

控制反转把创建对象的权利交给框架,是框架的重要特征,并非面向对象编程的专用术语。它包括依赖注入(Dependency Injection,简称DI)和依赖查找(Dependency Lookup)。

IOC的作用:削减计算机程序的耦合(解除我们代码中的依赖关系)

  • 使用步骤

(1)配置相应的依赖pom.xml

(2)spring配置文件bean.xml(名称可任意取)

         在xml文件中导入相应的约束

 bean标签

              用于配置让 spring 创建对象,并且存入 ioc 容器之中
 
                        id 属性:对象的唯一标识。
 
                        class 属性:指定要创建对象的全限定类名

(3)使用ApplicationContext接口,获取spring容器,再根据bean的id获取对象

 BeanFactory ApplicationContext 的区别

  • Bean标签

作用: 用于配置对象让 spring 来创建的。
           默认情况下 它调用的是类中的无参构造函数。如果没有无参构造函数则不能创建成功。
属性:
           id :给对象在容器中提供一个唯一标识。用于获取对象。
           class :指定类的全限定类名。用于反射创建对象。默认情况下调用无参构造函数。
           scope :指定对象的作用范围。
                       * singleton : 默认值,单例的 .
                       * prototype : 多例的 .
                       * request :WEB 项目中 ,Spring 创建一个 Bean 的对象 , 将对象存入到 request 域中 .
                       * session :WEB 项目中 ,Spring 创建一个 Bean 的对象 , 将对象存入到 session 域中 .
                       * global session :WEB 项目中 , 应用在 Portlet 环境 . 如果没有 Portlet 环境那么
                       globalSession 相当于 session.
           init-method :指定类中的初始化方法名称。
           destroy-method :指定类中销毁方法名称。
 
  • Bean的作用范围和生命周期

单例对象: scope="singleton"
                 一个应用只有一个对象的实例。它的作用范围就是整个应用。
                 生命周期:
                                  对象出生:当应用加载,创建容器时,对象就被创建了。
                                  对象活着:只要容器在,对象一直活着。
                                  对象死亡:当应用卸载,销毁容器时,对象就被销毁了   。
多例对象: scope="prototype"
                 每次访问对象时,都会重新创建对象实例。
                 生命周期:
                                  对象出生:当使用对象时,创建新的对象实例。
                                  对象活着:只要对象在使用中,就一直活着。
                                  对象死亡:当对象长时间不用时,被 java 的垃圾回收器回收了。
  •  spring的依赖注入

概念

依赖注入: Dependency Injection 。它是 spring 框架核心 ioc 的具体实现。
       我们的程序在编写时,通过控制反转,把对象的创建交给了 spring ,但是代码中不可能出现没有依赖的情况。 ioc 解耦只是降低他们的依赖关系,但不会消除。例如:我们的业务层仍会调用持久层的方法。
       那这种业务层和持久层的依赖关系,在使用 spring 之后,就让 spring 来维护了。
       简单的说,就是坐等框架把持久层对象传入业务层,而不用我们自己去获取。

注入方式

(1)构造函数注入

就是使用类中的构造函数,给成员变量赋值。注意,赋值的操作不是我们自己做的,而是通过配置的方式,让 spring 框架来为我们注入。

类中需要提供一个对应参数列表的构造函数。如:

涉及到的标签:constructor-arg

         属性:
                  index : 指定参数在构造函数参数列表的索引位置
                  type : 指定参数在构造函数中的数据类型
                  name : 指定参数在构造函数中的名称
                  value : 它能赋的值是基本数据类型和 String 类型
                  ref : 它能赋的值是其他 bean 类型,也就是说,必须得是在配置文件中配置过的 bean
      例:
           

 (2)

三、AOP 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值