Spring工作原理

1.Spring 原理及Aop与Ioc

内部最核心的就是IOC了,动态注入,让一个对象的创建不用new了,可以自动的生产,这其实就是利用java里的反射,反射其实就是在运行时动态的去创建、调用对象,Spring就是在运行时,跟xml Spring的配置文件来动态的创建对象,和调用对象里的方法的 。
Spring还有一个核心就是AOP这个就是面向切面编程,可以为某一类对象 进行监督和控制(也就是 在调用这类对象的具体方法的前后去调用你指定的 模块)从而达到对一个模块扩充的功能。这些都是通过 配置类达到的。
Spring目的:就是让对象与对象(模块与模块)之间的关系没有通过代码来关联,都是通过配置类说明管理的(Spring根据这些配置 内部通过反射去动态的组装对象)
1.IoC(Inversion of control): 控制反转

作用:有容器控制程序间的依赖关系
在传统的应用程序中,控制权在应用程序本身,程序的控制流程完全是开发者控制,在IOC容器中,组件不再由应用程序负责创建和配置,而是由IOC容器负责,应用程序只需直接使用已创建和配置好的组件。
1.1 IOC好处:

  1. 最小化应用程序的代码量;
  2. 应用程序易于测试;
  3. 以最小的影响和最少的侵入机制促进松耦合;
  4. 支持即时的实例化和延迟加载服务;

2.AOP(Aspect-Oriented Programming): 面向方面编程

2.1AOP定义:

在传统的面向对象(OOP)编程中,对垂直切面关注度很高,横切面关注很少,也很难关注,也就是说我们利用OOP思想可以很好的处理业务流程,却不能把系统中的某些特定重复性行为封装在某个模块中,例如在很多的业务中都需要记录操作日志,结果我们不得不在业务流程中嵌入大量的日志记录代码,无论是对业务代码还是对日志代码来说,今后的维护都非常复杂,由于系统中嵌入了这种大量的与业务无关的其他重复性代码,系统的复杂性、代码的重复性都增加了不少,从而使bug的发生率大大增加。简单来说面向切面编程通过提供另一种思考程序结构的途径来弥补面向对象编程的不足,在AOP中模块化的关键单元是类,而在AOP中模块的单元则是切面,它能对关注点模块化。

2.2AOP作用

提供声明式服务,允许用户实现自定义切面,在不改变原有的代码情况下增加新的功能。

2.3AOP实现

1.通过SpringAPI实现;
2.使用注解实现;
3.自定义来实现;

2.4AOP好处

1.使得真实角色处理的业务更加纯粹,不再关注一些公共的事情;
2.公共的业务由代理来完成,实现业务分工;
3.公共业务发生扩展时变得更加集中方便;

2.5AOP的重要性

Spring AOP将公共的业务(如日志、安全、事务等)和领域业务结合,当执行领域业务时,会把公共业务加进来,实现公共业务的重复利用,领域业务变得更加纯粹,让我们专注于领域业务,其本质就是动态代理。

2.6AOP的应用

持久换管理、事务管理、安全管理、日志管理、调试管理等;

2.7AOP的概述与术语

方面(Aspect): 一个关注点的模块化,此关注点可实现另外横切多个对象;
连接点(UoinPoint): 程序执行过程中明确的点,eg:方法的调用或特定的异常抛出;
通知(Advice): 在特定连接点,AOP框架的执行动作,各类型的通知;
切入点(Pointcut): 指定一个通知将被引发的一系列连接点的集合;
引入(Introduction): 添加方法或字段到被通知类,Spring允许引入新的接口到任何被通知的对象;
目标对象(Target Object): 包含连接点的对象,也被称作被通知或被代理对象;
AOP代理(AOP Proxy): Aop框架创建对象,包含通知,在Spring中AOP代理有两种:1.Jdk动态代理(基于接口);2.CGLIB代理(基于类)。一个动态代理一般代理某一类业务,一个动态代理可以代理多个类;
编织(Weaviong): 组织方面来创建一个被通知对象,可在编译时完成,也可在运行时完成;

2.Spring创建对象的方法

1.通过无参构造方法

2.通过有参构造方法

2.1通过下标;
2.2通过参数名;
2.3通过参数类型;

3.通过工厂模式创建对象
3.1静态工厂(静态代理);
3.2动态工厂(动态代理);

3.依赖注入的三种形式(DI):

1.接口注入(Interfacelnjection)

通过实现一个接口来实现依赖对象;
2.设置方法注入(Setter注入)

对象创建后,将被依赖对象通过Set方法设置进去;
3.构造方法注入(Constructiorinjection)

对象创建时,被依赖对象以构造方法参数的方式注入;
4.Setter注入和构造方法注入的比较

Setter注入的优点:

1.程序员更容易理解,接受通过Setter方式设定关系显得更加直观;
2.对于复杂的依赖关系,若采用构造注入会导致构造器臃肿,难以阅读,Spring在创建Bean实例时,需同时实例化其依赖的全部实例,若使用设置注入,则会避免这个问题,尤其是在某些属性可选的情况下,多参数的构造器显得更加笨拙;

构造注入的优点:

1.构造注入可在构造器中决定依赖关系的注入顺序,优先依赖先注入;
2.对于依赖关系无需变化Bean,因为没有Setter方法,所有的依赖关系在构造器内设定,所以不必担心代码对象依赖关系的破坏;
3.依赖关系只可在构造器中设定,只有组件的创建这才可改变组件的依赖关系,对组件的调用者而言,组件内部的依赖关系是完全透明,更符合高内聚的原则;

4.Spring中五个不同的通知

1.前置通知:

在某个连接点之前的执行通知,但此通知不能阻止连接点之前的执行流程(除非它抛出一个异常);
2.后置通知:

在某个连接点正常完成后执行的通知,eg:一个方法没有抛出任何异常,则正常返回。
3.异常通知:

在方法抛出异常退出时执行的通知;
4.最终通知:

当某个连接点退出的时候执行的通知(无论是正常返回还是异常退出);
5.环绕通知:

包围一个连接点的通知

5.Spring事务的特点

定义理解:

事务是对一系列数据数据操作进行统一提交或者回滚的操作,若插入成功则一起成功,反之其中有一条出现异常,则回滚之前的所有操作,可防止出现脏数据及数据库出现问题。
原子性(Atomicity):

事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。
一致性(Consistency):

事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态的含义是数据库中的数据应满足完整性约束。
隔离性(Isolation):

多个事务并发执行时,一个事务的执行不应影响其他事务的执行。
持久性(Durability):

已被提交的事务对数据库的修改应该永久保存在数据库中。

6.Spring框架的7个模块

在这里插入图片描述

Spring 框架是一个分层架构,由 7 个定义良好的模块组成。Spring 模块构建在核心容器之上,核心容器定义了创建、配置和管理 bean 的方式,组成 Spring 框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。每个模块的功能如下:

核心容器:

核心容器提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转 (IOC)模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。
Spring 上下文:

Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。

Spring AOP:

通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何对象支持 AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖 EJB 组件,就可以将声明性事务管理集成到应用程序中。

Spring DAO:

JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。

Spring ORM:

Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。

Spring Web 模块:

Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。所以,Spring 框架支持与 Jakarta Struts 的集成。Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。

Spring MVC 框架:

MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI。

Spring 框架的功能可以用在任何 J2EE 服务器中,大多数功能也适用于不受管理的环境。Spring 的核心要点是:支持不绑定到特定 J2EE 服务的可重用业务和数据访问对象。毫无疑问,这样的对象可以在不同 J2EE 环境 (Web 或 EJB)、独立应用程序、测试环境之间重用。

7.Spring 的优点

1、非侵入式设计

Spring是一种非侵入式(non-invasive)框架,它可以使应用程序代码对框架的依赖最小化。

2、方便解耦、简化开发

Spring就是一个大工厂,可以将所有对象的创建和依赖关系的维护工作都交给Spring容器的管理,大大的降低了组件之间的耦合性。

3、支持AOP

Spring提供了对AOP的支持,它允许将一些通用任务,如安全、事物、日志等进行集中式处理,从而提高了程序的复用性。

4、支持声明式事务处理

只需要通过配置就可以完成对事物的管理,而无须手动编程。

5、方便程序的测试

Spring提供了对Junit4的支持,可以通过注解方便的测试Spring程序。

6、方便集成各种优秀框架

Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如Struts、Hibernate、MyBatis、Quartz等)的直接支持。

7、降低Jave EE API的使用难度

Spring对Java EE开发中非常难用的一些API(如JDBC、JavaMail等),都提供了封装,使这些API应用难度大大降低。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值