Spring框架;Spring中IOC简介及搭建;Spring中AOP简介;

一,Spring介绍

        Spring 的全称: Spring Framework

        Spring是一个优秀的开源的轻量级的企业应用开发框架,是为了解决企业应用程序开发复杂性而创建的。它大大简化了java企业级开发的复杂性,提供了强大,稳定的功能,能够创建出松耦合,易测试,易扩展,易维护的java应用系统,又没有带来额外的负担。它坚持一个原则:不重新发明轮子。已经有较好解决方案的领域,Spring绝不做重复性的实现。例如对象持久化和ORM,Spring只是对现有的JDBC,mybatis,等技术提供支持,使之更易用,而不是重新做一个实现。框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件。

        

整个项目的开发始终贯彻着如下的核心架构理念:

        A.降低开发成本,方便使用,促进良好的编程习惯

        B.整合各类框架,遵守轮子理论(不重复的造轮子 ,使用现有的轮子)

        C.易于选择,方便测试

        D.统一配置,灵活可扩展

        E.非侵入式

        F.提供最好的IOC解决方案

        G.提供最好的AOP解决方案

二,介绍Spring的架构图

Spring框架由大约20个功能模块组成。组成Spring 框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。

每个模块的功能如下:

 Spring Core:核心容器提供Spring 框架的基本功能,为Spring提供了基础服务支持,核心容器的主要组件是BeanFactory 。

通过BeanFactory,Spring使用工厂模式来实现控制反转(IOC ) ,将应用程序的配置和依赖关系与实际的应用程序代码分开。

Spring之所以称为容器,就是由于BeanFactory的自动装备和注入。

Spring Context:Spring 上下文是一个配置文件,向Spring 框架提供上下文信息。主要用于加载属性文件,扫描本地的包等

BeanFactory使Spring成为容器,上下文模块使Spring成为框架。

这个模块对BeanFactory进行了扩展,添加了对I18N,系统生命周期事件以及验证的支持。这个模块提供了许多企业级服务,例如:邮件服务、JNDI访问 、EJB集成、远程调用以及定时服务,并且支持与模板框架的集成。

Spring AOP : 通过配置管理特性,Spring AOP 模块直接将面向切面编程功能集成到了Spring 框架中(AOP把一个业务流程分成几部分,例如权限检查、业务处理、日志记录, 每个部分单独处理,然后把它们组装成完整的业务流程。每个部分被称为切面)。所以,可以很容易地使Spring 框架管理的任何对象支持AOP 。Spring AOP 模块为基于Spring 的应用程序中的对象提供了事务管理服务

Spring JDBC:这个模块封装了数据库连接的创建、语句对象生成、结果集处理、连接关闭等操作,而且重构了所有数据库系统的异常信息,用户不在需要处理数据库异常了。提供了JDBC的抽象层,简化了JDBC编码,同时使代码更健壮。 在这个模块中,利用了Spring的AOP模块完成了为系统中对象提供事务管理的服务。

Spring ORM :Spring没有实现自己的ORM方案,而是为当前主流的ORM框架预留了整合接口,包括Mybatis,Hibernate等。所有这些都遵从Spring 的通用事务和DAO 异常层次结构。 Spring的事务管理支持所有这些ORM框架以及JDBC。

Spring web:集成各种优秀的web层框架的模块(Struts、Springmvc)

三,Spring 学习的核心内容:

        1) IOC:控制反转--帮助我们创建对象的控制权发生反转

        2) AOP:面向切面编程---提升代码的扩展性,有点像过滤器.针对方法.

        3) TX:声明式事务管理---强大事务管理机制.事务过程不需要程序员编写,只需要声明出哪些方法需要进行事务管理.

四,Spring IOC简介和环境搭建

1,简介

                责任链       

                                  我们在使用MVC进行开发的时候数据在各层之间进行传递,数据传递的时候在业务上形成一个链条,这个链条称之为责任链 ​

                基于责任链模式开发的缺点

                                层和层之间的相互调用造成了耦合性比较高 ​

                解决的方案

                                Spring IOC :控制反转 ​ 英文全称:Inversion of Control

                                控制:对类实例化的控制.指的是创建对象这个事情.

                                反转:以前由程序员实例化的过程,转交给Spring进行实例化. ​ 通俗解释:由Spring帮助实化对象,释放程序员对对象的关注度,所有的关注度都放在业务上.同时还可以达到解耦的效果.

                项目应用场景

                1.帮助创建SqlSessionFactory ​

                2.管理所有Mapper接口,管理所有BizImpl类.

2,(maven版)环境搭建步骤:

1) pom.xml里添加依赖:

	<!--进行junit单元测试 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency><!--依赖于commons-logging日志管理 --><dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.2</version></dependency><!--提供了框架的基本组成部分,包括IOC 和 DI--><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>4.1.6.RELEASE</version></dependency><!-- 提供了BeanFactory--><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>4.1.6.RELEASE</version></dependency><!--上下文配置对象,提供一个框架式的对象访问方式--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>4.1.6.RELEASE</version></dependency><!--提供了强大的表达式语言--><dependency><groupId>org.springframework</groupId><artifactId>spring-expression</artifactId><version>4.1.6.RELEASE</version></dependency>

2) resources下创建applicationContext.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans    http://www.springframework.org/schema/beans/spring-beans.xsd"><!--User  user =new User();id:通过这个属性获取类的对象class:配置哪个类的对象--><bean id="us" class="com.jr.pojo.User"></bean>
</beans>

3) 测试类代码:

//[1]解析applicationContext.xml//Spring配置文件运行后产生ApplicationContext接口对象.
//Spring中所有内容都放入到ApplicationContext容器中.ApplicationContext  app =new ClassPathXmlApplicationContext("applicationContext.xml") ;//[2]获得user对象User us = (User) app.getBean("us");// getBean(“<bean>id属性值”,对象是什么类型);// 如果省略第二个参数,getBean()返回值为Objectus.eat();

3,(java版)环境搭建步骤:

1)创建Java项目,导入jar包:

2).src下创建applicationContext.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"></beans>

3).创建实体类User:

public class User {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}public User() {}public User(String name) {this.name = name;}@Overridepublic String toString() {return "User{" +"name='" + name + '\'' +'}';}public void eat(){System.out.println(name+"在吃汉堡。。。");}
}

4).编写applicationContext.xml配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="user" class="com.jr.pojo.User"/></beans>

5).编写测试类:

public class MyTest {@Testpublic void testioc(){//1.加载Spring核心配置文件ApplicationContext applicationContext =new ClassPathXmlApplicationContext("applicationContext.xml");//2.根据bean id获得user对象User user=applicationContext.getBean("user",User.class);user.setName("娜娜");user.eat();}
}

五,Spring    AOP

1,介绍AOP

        AOP的概念:Aspect Oriented Programming AOP的中文: 面向切面编程

        AOP有特定的应用场合,它只适合具有横切逻辑的应用场合,如:性能检测,访问控制,事务控制,日志记录等。就像面向对象编程的关注点在于对象 即类;而面向切面编程的关注的在于切面;

        那么什么是切面?可以理解为程序执行时的某个节点,或者更具体一点,在某个方法执行之前,执行之后等节点。

        使用AOP技术,可以将一些系统性相关的编程工作,独立提取出来,独立实现,然后通过切面切入进系统。从而避免了在业务逻辑的代码中混入很多的系统相关的逻辑——比如权限管理,事务管理,日志记录等等。这些系统性的编程工作都可以独立编码实现,然后通过AOP技术再切入进系统即可。从而达到了 将不同的关注点分离出来的效果。

        举个例子:我现在要实现一个删除功能,在Servlet里 调用了 业务逻辑层里的删除方法。而在业务逻辑层Service实现类里,需要在删除方法前进行权限检查,在删除方法后进行日志记录。那我就将权限检查和日志记录两个方法提取出来,放到单独的一个类里去 ,而不是跟删除的业务代码杂糅在一块。最后在通过AOP技术动态织入到删除方法周围。在service实现类里的删除方法就是切点/连接点(连接点范围更大,管符合一定条件规则的连接点叫切点);而权限检查和日志记录就是切面;切面的工作内容叫做通知 同时通知也规定了什么时候执行切面。

2,使用AOP目的

           按照软件重构思想的理念,在OOP中通过抽象把相同的代码抽取到父类中(纵向抽取),但无法通过抽象父类的方式消除重复性的横切代码(如事务处理这种非业务性的重复代码),而AOP就是为了解决将分散在各个业务逻辑代码中的相同代码通过横向切割的方式抽取到一个独立的模块中。

3.AOP中的几个要素

        1) Aspect :切面,切入系统的一个切面。比如事务管理是一个切面,权限管理也是一个切面;

        2) Join point :连接点,也就是可以进行横向切入的位置;

        3) Advice :通知,切面在某个连接点执行的操作(分为: Before advice , After returning advice , After throwing advice , After (finally) advice , Around advice );

        4) Pointcut :切点,符合切点表达式的连接点,也就是真正被切入的地方;

4.AOP的分类:

        AOP分为静态AOP和动态AOP。静态AOP他是将切面代码直接编译到Java类文件中。动态AOP是指先将切面代码统一放到一个切面类里去,然后进行动态织入到指定的切点方法周围,从而实现AOP。Spring的AOP为动态AOP,实现的技术为: JDK提供的动态代理技术 和 CGLIB(动态字节码增强技术) 。尽管实现技术不一样,但 都是基于代理模式 , 都是生成一个代理对象 。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/414460.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

asp.net core在win上的发布和部署

一、asp.net core两种发布方式 1、两个发布方式——【框架依赖发布】和【独立发布】 2、两种发布方式的差别 二、发布的详细过程 1、【生成】->【发布】 2、框架依赖发布 设置发布参数&#xff0c;然后进行发布 发布好的文件&#xff0c;把它们放到一个新的目录文件夹里 …

Yolov5 AI学习笔记

Yolov5 AI学习笔记 环境准备 需要Python的开发环境&#xff0c;安装Anaconda。 Anaconda的一些命令&#xff1a; # 创建虚拟环境 conda create -n yolo_cpu python3.9 # 查看虚拟环境 conda env list # 激活虚拟环境 conda activate <env_name>Yolov5上手 下载源码 …

六、Selenium操作指南(三)

文章目录 七、模拟鼠标操作&#xff08;一&#xff09;左键 click()&#xff08;二&#xff09;右键 context_click()&#xff08;三&#xff09;双击 double_click()&#xff08;四&#xff09;拖拽 drag_and_drop(source,target)&#xff08;五&#xff09;悬停 move_to_elem…

【动图效果概览】自动化建链后,Exata调用STK更新卫星位置

如下图所示&#xff0c;动画遵循 时间前进方向&#xff0c;划分截取为5段 &#xff08;因为每张照片限制大小5MB&#xff0c;不够应该够看清个大概意思了&#xff09;&#xff1a;

结构型设计模式-适配器(adapter)模式-python实现

设计模式汇总&#xff1a;查看 通俗示例 想象一下&#xff0c;你刚从国外带回一台最新的笔记本电脑&#xff0c;但是你发现它的电源插头是德标插头&#xff0c;而家里的电源插座是中式插座&#xff0c;这时怎么办呢&#xff1f;你需要一个电源适配器来将德标插头转换成中式插座…

读软件开发安全之道:概念、设计与实施15安全测试

1. 安全测试 1.1. 测试是开发可靠、安全代码中的关键一环 1.2. 测试安全漏洞的目的是主动检测 1.3. 模糊测试是一种强大的补充技术&#xff0c;可以帮助我们找到更深层次的问题 1.4. 针对当前漏洞创建的安全回归测试&#xff0c;目的是确保我们不会再犯相同的错误 1.5. 大…

省略号(一行多行)vue3

组件 <template><div ref"tooltipParentRef" class"moreTipText"><el-tooltip:placement"props.placement"effect"dark":enterable"true":show-after"200":offset"10":popper-class&qu…

【学习笔记】卫星通信NTN 3GPP标准化进展分析(三)- 3GPP Release17 内容

一、引言&#xff1a; 本文来自3GPP Joern Krause, 3GPP MCC (May 14,2024) Non-Terrestrial Networks (NTN) (3gpp.org) 本文总结了NTN标准化进程以及后续的研究计划&#xff0c;是学习NTN协议的入门。 【学习笔记】卫星通信NTN 3GPP标准化进展分析&#xff08;一&#xff…

秋招突击——算法练习——8/26——图论——200-岛屿数量、994-腐烂的橘子、207-课程表、208-实现Trie

文章目录 引言正文200-岛屿数量个人实现 994、腐烂的橘子个人实现参考实现 207、课程表个人实现参考实现 208、实现Trie前缀树个人实现参考实现 总结 引言 正文 200-岛屿数量 题目链接 个人实现 我靠&#xff0c;这道题居然是腾讯一面的类似题&#xff0c;那道题是计算最…

【TNT】Target-driveN Trajectory Prediction学习笔记

这里写自定义目录标题 前言(文章的核心思想)(1阶段)(2阶段)(3阶段)(网络框架)1. 场景上下文编码2. 目标预测3. 目标条件运动估计4. 轨迹评分与选择 (模型推理)(总结)(消融研究结论)(网络)(问题厘清) TNT Framework 前言 论文: https://arxiv.org/abs/2008.08294代码: https://…

机器学习(五) -- 监督学习(8) --神经网络1

系列文章目录及链接 上篇&#xff1a;机器学习&#xff08;五&#xff09; -- 无监督学习&#xff08;2&#xff09; --降维2 下篇&#xff1a; 前言 tips&#xff1a;标题前有“***”的内容为补充内容&#xff0c;是给好奇心重的宝宝看的&#xff0c;可自行跳过。文章内容被…

【个人笔记】Git

Tiltle: Github 使用 &#x1f4d6; 快速使用 音标&#xff1a;[ɡɪthʌb] 0 介绍 Github是一个面向开源与私有软件项目的 托管平台&#xff0c;Git源自其内部的版本库格式.2008年上线&#xff0c;18年被微软收购&#xff1b;有很多知名的开源项目&#xff1a;jQuery、pytho…

如何在 CentOS 6 上安装 Nagios

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 Status: 已弃用 本文涵盖的 CentOS 版本已不再受支持。如果您目前正在运行 CentOS 6 服务器&#xff0c;我们强烈建议升级或迁移到受支持…

STM32H750+CubeIDE+FreeRTOS+ETH(LAN8720A)+LWIP

文章目录 STM32H750CubeIDEFreeRTOSETH(LAN8720A)LWIPCubeIDE配置RCC时钟树SYSETH串口MPUFreeRTOSLWIPGPIO然后就可以点击生成代码了&#xff01; 代码修改printf重定向补充硬件复位更改补充链接文件然后就可以编译下载ping成功了&#xff01; socket网络编程 STM32H750CubeIDE…

【计算机网络】浏览器输入访问某网址时,后台流程是什么

在访问网址时&#xff0c;后台的具体流程可以因不同的网站、服务器和应用架构而异。 实际过程中可能还涉及更多的细节和步骤&#xff0c;如缓存处理、重定向、负载均衡等。 此外&#xff0c;不同的网站和应用架构可能会有不同的实现方式和优化策略。 部分特定网站或应用&#x…

云计算第二阶段---DBA Day8-Day9

DBA Day8 该阶段的2天内容,都会和数据库中间件,集群配置有关. 什么是中间件&#xff1f; 通俗来说&#xff0c;就是在正式文件内容从客户端发送或获取请求时&#xff0c;在传播过程中地点中间商&#xff0c;负责管理请求&#xff0c;并对其进行分类。 环境准备: 准备…

AssetsBundleExtractor中文汉化版2.2

感谢-DJ小良汉化 AssetsBundleExtractor工具是一款 人类黎明游戏的assest修改工具 和MOD制作所需要的一款软件 下载地址&#xff1a;https://pan.quark.cn/s/b8104b849fbe

23种设计模式之模板模式

一.什么是模板模式 ‌‌模板模式是一种行为型设计模式&#xff0c;它定义了一个算法的骨架&#xff0c;而将一些步骤留给子类实现。‌这种模式允许子类在不改变算法结构的基础上&#xff0c;重新定义算法的某些步骤。模板模式属于行为型设计模式&#xff0c;主要用于处理那些需…

SpringBoot应用打成ZIP部署包

背景 平常开发SpringBoot应用&#xff0c;打包的时候一般都是按默认的打包方式把所有资源、源码和依赖统一打到一个jar包&#xff0c;这种打包方式方便快捷。最近开发项目遇到一个需求&#xff0c;需要把项目中的配置文件和/bin目录中的启停脚本打到SpringBoot应用jar之外&…

「bug」nvitop ERROR: Failed to initialize curses

nvitop 作为一个优秀个 Nvidia显卡查询库&#xff0c;简单易用且显示信息十分丰富&#xff0c;相比 Nvidia-smi 更方便&#xff0c;简直是每个 开发人员必备的库&#xff0c;安装也十分方便&#xff0c;直接采用 pip install nvitop 即可&#xff0c;调用的时候也是直接在 Term…