一 .概述

spring框架是以一个分层架构,有七个定义良好的模块组成,Spring模块构建在核心容器之上,核心容器定义了创建,配置和管理bean方式:

1.Spring Core:核心容器 ,提供Spring的基本功能.

2.SPring Contest:Spring上下文,是一个配置文件

3.Spring AOP : Spring 中面向切面编程

4..Spring Dao:用于管理异常与抛出错误的信息

5.Spring ORM: 提供ORM对象关系工具

6.Spring Web: 用于处理请求与处理参数绑定的工作

7.Spring MVC:MVC框架是一个全功能的构建Web应用程序的MVC实现

 核心:

      支持不绑定到特定J2EE服务的可重用业务,和数据的访问对象,这样的对象可以在不同的J2EE环境下独立应用程序,测试环境之间的重用

二.Spring核心概念

1.BeanFactory:Spring内部使用,创建Bean工厂

2.ApplicationContext:外部应用程序调用.也成为Spring容器

3.IOC控制反转:Spring容器创建对象

4.DI依赖注入:松耦合方式实现对象间直接依赖

5.AOP面向切面编程:补充java面向对象的不足

三.Spring的三大可信组件关系

Bean、Context、Core三大核心组件的关系:

Bean 包装的是 Object,而 Object 必然有数据,如何给这些数据提供生存环境就是 Context要解决的问题,对 Context
来说它就是要发现每个 Bean 之间的关系,为它们建立这种关系并且要维护好这种关系。所以 Context 就是一个Bean关系的集合,这个关系集合又叫 Ioc
容器,一旦建立起这个 Ioc 容器后 Spring 就可以为你工作了。那 Core 组件又有什么用武之地呢?其实Core 就是发现、建立和维护每个 Bean
之间的关系所需要的一些类的工具,从这个角度看来,Core 这个组件叫 Util 更能让你理解。

把Bean 比作一场演出中的演员的话,那 Context 就是这场演出的舞台背景,而
Core应该就是演出的道具了。只有他们在一起才能具备能演出一场好戏的最基本的条件。当然有最基本的条件还不能使这场演出脱颖而出,还要他表演的节目足够的精彩,这些节目就是
Spring 能提供的特色功能了。
 

四.Spring框架的两大核心

1.IOC:由Spring框架提供,

     作用:

          管理对象与创建对象的生命中平周期,称为控制反转,创建对象的权利与管理对象的生命周期     
 交给Spring框架来处理,IoC是设计思想,IoC有三个核心:BeanFactory、反射、DI。BeanFactory利用反射实现对象的创建,DI实现对象关系管理

2.DI:对象依赖注入

     
 在创建对象的过程中Spring可以依据对象的关系,自动吧其他对象注入进来,这个过程称为DI,DI(依赖注入)其实就是IOC的另外一种说法,DI是由Martin
Fowler 在2004年初的一篇论文中首次提出的。他总结:控制的什么被反转了?就是:获得依赖对象的方式反转了。

3.总结:

        Spring的核心干了两件事:

       创建对象 (IOC) 与设置对象关联关系 (DI)

五.自动装配

利用注解方式,我们只需要写@Autowired注解,底层就会去容器中找对应的对象,如果有获取到,反射调用其对应的set方法,设置。而这个调用过程都是自动,我们没有手工去写set方法。所以这个过程也称为自动装配。

六.Spring面向切面编程

1.概念

Spring核心特征中除了IoC控制反转、DI依赖注入,还有一个核心就是强大的面向切面编程AOP(Aspect Oriented
Programming)的实现。

2.Sring AOP有三要素:

Aspect定义切面;
通过通知(Advice)来指定具体做什么事情。如方法执行前做什么,方法执行后做什么,抛出异常做什么,从而实现对象行为(方法)的增强;

具体通过切点(PointCut)配置切点表达式(expression)来指定在哪些类的哪些方法上织入(ware)横切逻辑;被切的地方叫连接点(JoinPoint);
 

3.通知的执行顺序
Spring框架实现了AOP面向切面,其引入了第三方AspectJ框架来具体实现。AspectJ提供了五种切入方式,术语称为通知advice。

具体五种为:

前置通知before
后置通知after
环绕通知around
返回后通知afterReturning
异常通知afterThrowing。

多切面执行顺序

下面是 两个切面 各通知的执行顺序:

 

 

 

技术
下载桌面版
GitHub
百度网盘(提取码:draw)
Gitee
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:766591547
关注微信