当前位置: 首页 > article >正文

Spring框架

轻量化的企业级框架

企业级应用指的是 大规模性能和安全要求高业务复杂灵活多变 的大型 WEB 应用程序

Spring之父

Rod Johnson SpringFramework创始人, interface21 CEO。

Spring 是由Rod Johnson于2004年3月24日发布了第一个版本

Spring体系结构

Spring 体系结构包括Core、AOP、DataAccess、Web等模块

Spring Core:Spring框架的最基础部分,提供DI(依赖注入)特性。

Spring Web:为Spring在Web应用程序中的使用提供了支持。

Spring ORM:对主流ORM框架(Hibernate、Toplink等)进行集成。

Spring Context:Spring上下文,提供Bean容器的集合。

Spring AOP:基于Spring Core的符合规范的切面编程的实现。

Spring JDBC:提供了JDBC的抽象层,简化了JDBC编码。

Spring生态系统

Spring 生态系统由Spring Boot、SpringCloud、SpringData等子项目组成

Spring最新版本

Spring 目前的最新的稳定版本是5.0.7GA

ioc管理类,用解耦的方式造对象

低耦合的方法连接数据库

SpringIOC(控制反转):解耦 高内聚,低耦合编程思想 硬编码实现解耦: 1.不要直接new对象,通过反射创建 2.将需要创建的对象独立保存在资源文件中,动态加载

步骤:

1. 编写资源文件(driver、url、root、password)

2. 创建工具类

3. 加载文件

4. 通过资源文件key获取value

5. 获取连接

低耦合方式获取对象

代码编写逻辑:

1.创建各接口及各接口实现类,并写相关方法

2.编写资源文件,降低耦合性

3.创建加载资源文件的工厂类,以解耦方式创建实例对象

4.在相关接口实现类里,采用低耦合方式替换高耦合方式

5.编写测试类

Spring两大思想

一. IOC控制反转 DI依赖注入 IOC容器:springIOC搭建spring容器管理程序中的各个组件(class)让程序可以实现高内聚,低耦合的编程

二. AOP面向切面编程

spring环境搭建: 1.坐标 2.配置文件

SpringIOC

1.找到需要以解耦方式获取实例对象的类 ​

2.将需要spring管理的类注入spring容器 ​ <bean id="唯一标识" class="类"></bean>

3.向spring容器中索取java实例(解耦) ​ 3.1.加载spring核心配置文件,获取spring容器对象

 ApplicationContext applicationContext =  new ClassPathXmlApplicationContext("beans.xml")

3.2.获取对象

Student student = (Student) applicationContext.getBean("student");

普通低耦合方式和springIOC方式的区别

普通 ------- springIOC

beans.properties ------- beans.xml

key=value ------- id=class

BeansFactory ------- ApplicationContext

getBean(key) ------- getBean(id)

SpringIOC解释

● IOC名词解释,作用是解耦,使用IOC容器管理项目组件之间的耦合关系

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

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

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

SpringIOC关键字

BeanFactory(父) ​ ApplicationContext(子)

ClassPathXmlApplicationContext======>通过加载主配置文件的相对路径,获取spring容器 ​ FileSystemXmlApplicationContext=====>通过加载主配置文件的绝对路径,获取spring容器 ​ AnnotationConfigApplicationContext========>加载配置类,获取spring容器

SpringAOP

概念

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

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

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

AOP通知类型

AOP将抽取出来的共性功能称为通知;通知类型:以通知在上下文中的具体位置作为划分 前置通知(Before) 返回通知(After-returning) 异常通知(After-throwing) 后置通知(After) 环绕通知(Around)

AOP连接点(Join point)

AOP将所有的方法都视为连接点,不管是接口里面的抽象方法,还是实现类里面的重写方法,都是连接点

AOP切点(Pointcut)

AOP将可能被抽取共性功能的方法称为切入点。切入点是连接点的子集

AOP目标对象(Target)

就是挖掉功能的方法对应的类生的对象,这种对象是无法直接完成最终工作的

AOP织入(Weaving)

就是将挖掉的功能回填的动态过程

AOP切面

切点+通知

SpringAOP+AspectJ实现步骤

1.添加依赖,aop与aspectj表达式的依赖 2.创建spring的主配置文件,bean内的命名空间要添加aop的 3.创建业务代码并编写日志记录代码(事务管理代码) 4.将业务层与日志记录层注入spring容器 5.aop:config--aop配置 aop:aspect--aop切面 aop:before--通知内容与通知类型

切点表达式配置语法

execution(修饰符 返回值 包名称.类名称.方法名称(参数列表)) ​ eg:

 execution(public void com.apesource.service.ServiceImp.findAll())

1.修饰符可以省略代表任意 execution(返回值 包名称.类名称.方法名称(参数列表)) 2.返回值可以使用“”代表任意 execution( 包名称.类名称.方法名称(参数列表)) 3.包名可以使用“”代表任意名称 execution( ...类名称.方法名称(参数列表)) 4.包名可以使用“..”代表任意个数 execution( ...类名称.方法名称(参数列表)) 5.类名与方法名可以使用“”代表任意 execution(* ....(参数列表)) 6.参数列表可以使用".."代表任意个数任意类型 execution( ....*(..)) 如果有参数 int======>int String===>java.lang.String

⭐️⭐️⭐️AOP实现语法
xml方式

运行结果

注解方式

1. 注解方式装配service

2. 注解方式装配通知类(日志类)

3. 编写spring配置文件,实现包扫描和开启aop动态代理


http://www.kler.cn/a/288769.html

相关文章:

  • 【AI日记】24.11.14 复习和准备 RAG 项目 | JavaScript RAG Web Apps with LlamaIndex
  • LlamaIndex
  • 浅谈:基于三维场景的视频融合方法
  • c++写一个死锁并且自己解锁
  • LeetCode【0033】搜索旋转排序数组
  • 限流算法(令牌通漏桶计数器)
  • 店铺所有商品接口数据解析,JSON格式的示例
  • 在Spring Boot中实现请求IP白名单拦截
  • python-读取word中的内容
  • 代码随想录第二十天 | 513. 找树左下角的值,路径总和,106. 从中序与后序遍历序列构造二叉树
  • react|useState的异步渲染
  • 【AIGC】ChatGPT 3.5/4.0 新手使用手册
  • 【pyhton】python如何实现将word等文档中的文字转换成语音
  • 如何用Python 下载B站上的视频
  • SQL【2】稍稍进阶
  • 无人机图传通信模组,抗干扰、稳定传输,8公里图传模组原理
  • 最长回文子串:动态规划推导
  • JAVA 手机部件功耗计算
  • 魅力中国:全球消费者 “反向海淘” 首选,淘宝代购集运系统搭建秘籍
  • 趣味算法------单一背包问题(01背包问题)贪心算法解决
  • 安防视频综合管理系统EasyCVR视频汇聚平台集群部署出现状态不同步的情况是什么原因?
  • 遥控器显示分别对应的无人机状态详解!!
  • VUE2.0 elementUI el-input-number 数据更新,视图不更新——基础积累
  • 使用idea快速创建springbootWeb项目(springboot+springWeb+mybatis-Plus)
  • 2.SpringBoot项目pom.xml文件配置
  • 【安卓面试】