Spring框架——介绍与基本概念!

一、Spring框架概述

1.什么是Spring

Spring是一个轻量级的Java 开发开源框架,用于构建企业级应用程序。它提供了一组广泛使用的技术和API,包括依赖注入AOP数据访问事务管理Web开发集成测试等。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件。Spring框架的主要目标是帮助开发人员提高生产力和系统可维护性。Spring的核心是控制反转(IoC)和面向切面(AOP)

1.1、Spring框架高内聚低耦合

Spring框架是一个非常流行的Java开发框架,它的设计原则之一就是高内聚低耦合。

所谓高内聚,就是指一个模块或一个类只负责完成自己的任务,不涉及其他模块或类的业务逻辑。这样的设计能够保证模块或类的功能单一,易于维护和扩展。

而低耦合则指不同的模块或类之间的依赖关系尽量降低,相互之间的影响越小越好。这样的设计能够实现模块和类之间的独立性,模块或类的修改对其他模块或类的影响也会降到最低。

Spring框架在实现高内聚低耦合的原则方面做得非常好,它采用了依赖注入(DI)和面向切面编程(AOP)等技术,将模块或类之间的依赖关系降到最低,使得整个系统具有良好的可维护性和扩展性。

1.2、Spring的优点
  • 松耦合:Spring 采用松耦合的设计思路,使得应用程序更加灵活、可扩展和易于维护。

  • IOC 容器:Spring 框架提供了一个 IOC 容器,可以管理和组装对象之间的依赖关系,使得应用程序开发更加容易。

  • AOP 支持:Spring 框架支持面向切面编程(AOP),可以实现关注点分离,提高代码可复用性和可维护性。

  • 事务管理:Spring 框架提供了一个强大的事务管理框架,可以方便地管理事务,减少了开发人员的工作量。

  • 集成众多框架:Spring 框架可以与众多其他框架集成,例如 Struts、Hibernate、MyBatis、Quartz 等,使得应用程序开发更加便捷。

  • 简化开发:Spring 框架提供了一系列简化开发的工具和模板,例如 Spring MVC、Spring Boot 等,可以大大降低开发成本和时间。

  • 社区支持:Spring 框架是一个广泛使用的开源框架,拥有强大的社区支持和完善的文档,可以为开发人员提供良好的支持。

二、控制反转(IOC) 和依赖注入

(一)控制反转

IOC( Inversion of Control,中文释义:控制反转 ) 是Spring框架的核心思想之一,主要用于解耦。IOC是指将创建对象的控制权转移给Spring框架进行管理。由Spring框架根据配置文件或注解等方式,创建bean对象并管理各个bean对象之间的依赖关系。使对象之间形成松散耦合的关系,实现解耦;

○ 控制 :指的是对象创建(实例化、管理)的权力

○ 反转 :控制权交给外部环境(Spring框架、IoC容器)

(二)依赖注入

1.基本概念 

DI(Dependecy Inject,中文释义:依赖注入) 是对IOC概念的不同角度的描述,是指应用程序在运行时,每一个bean对象都依赖IOC容器注入当前bean对象所需要的另外一个bean对象。(例如在MyBatis整合Spring时,SqlSessionFactoryBean 依赖IOC容器注入一个 DataSource数据源bean)。

2.DI注入的数据类型:

  • 注入对象
  • 注入基本类型与String
  • 复杂类型list arry set map properties

3.DI实现方式:

  • set注入=通过set方法维护对象之间的依赖关系
  • 构造注入=通过构造方法维护对象之间的依赖关系
  • 属性注入(不推荐)
(1)set注入DI实现步骤:
1.给属性提供set方法
2.在bean标签内部开启配置
  • 配置位置:<bean>此位置</bean>
  • 配置语法:<property 属性名="属性值"></property>
  • 配置属性:
name属性名称
value属性值
ref属性值的引用构
(2)构造注入DI实现步骤:
1.给属性提供构造方法
2.在bean标签内部开启配置
  • 配置位置:<bean>此位置</bean>
  • 配置语法:<constructor-arg 属性名="属性值"></constructor-arg>
  • 配置属性:
name构造方法参数名称
index构造方法参数下标
type构造方法参数类型
value属性值
ref属性值的引用

三、SpringIOC容器对bean的管理 

(一)bean的自动装配

手动装配
<constructor-arg></constructor-arg>
<property></property>
语法

  • autowire="属性值"
  • default-autowire="属性值"

位置

  • bean标签---->局部设置
  • beans标签--->全部设置

属性

  • byName============>通过set方法按照名称自动装配,属性名称与bean的id
  • byType============>通过set方法按照类型自动装配,属性类型与bean的class
  • constructor=======>通过构造方法按照自动装类型配,属性类型与bean的class

注意:

  1. 全局,局部均设置,则就近原则
  2. 大型项目不建议使用,自动装配可读性低
  3. 自动装配一般只装配javaBean 

(二)bean的实例化 

通过类的无参构造方法实例化(默认)

通过指定工厂创建对象

通过指定静态工厂创建对象 

(三)bean的生命周期(单例)

四个阶段:实例化-->属性注入-->初始化-->销毁 

1.实例化
2.属性赋值
3.初始化

  • 接口初始化InitializingBean
  • 属性初始化init-method

4.操作使用
5.销毁

  • 接口销毁DisposableBean
  • 属性销毁destory-method

(四)bean的作用域

 语法:scope="属性"
属性:
singleton=====>单例,性能↑,安全性↓
prototype=====>多例,性能↓,安全性↑
web环境
request=======>一个请求创建javaBean
session=======>一个会话创建javaBean

四、面向切面(AOP)

AOP(Aspect-Oriented Programming: 面向切面编程)

将那些与业务无关,却为业务模块所共同调用的逻辑(例如事务处理、日志管理、权限控制等)封装抽取成一个可重用的模块,这个模块被命名为“切面”(Aspect),便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可拓展性和可维护性。

Spring AOP 基于动态代理实现:

  1. 如果被代理的对象,已经实现某个接口,则 Spring AOP 会使用 JDK Proxy(反射),基于接口的方式,创建代理对象(JDK动态代理的核心是InvocationHandler接口和Proxy类);
  2. 如果被代理的对象,没有实现某个接口,就无法使用 JDK Proxy 去进行代理了,这时候 Spring AOP 会使用 Cglib,基于继承的方式,生成一个被代理对象的子类来作为代理(Cglib动态代理的核心是MethodInterceptor接口和Enhancer类)。

AOP通知类型

AOP将抽取出来的共性功能称为通知;通知类型:以通知在上下文中的具体位置作为划分

  • 前置通知(Before)
  • 后置通知(After)
  • 返回通知(After-returning)
  • 异常通知(After-throwing)
  • 环绕通知(Around)

  • AOP连接点(Join point):AOP将所有的方法都视为连接点,不管是接口里面的抽象方法,还是实现类里面的重写方法,都是连接点
  • AOP切点(Pointcut):AOP将可能被抽取共性功能的方法称为切入点。切入点是连接点的子集
  • AOP目标对象(Target):就是挖掉功能的方法对应的类生的对象,这种对象是无法直接完成最终工作的
  • AOP织入(Weaving):就是将挖掉的功能回填的动态过程
  • AOP切面:切点+通知

 

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值