秋招突击——第四弹——Java的SSN框架快速入门——Spring(2)

文章目录

    • 前言
    • 其他
      • Spring加载properties
    • 容器
      • 创建容器
      • 获取bean
      • BeanFactory
      • 容器总结
    • 注解
      • 注解开发对定义bean
      • 纯注解开发
      • Bean管理
        • Bean作用范围
        • Bean生命周期
      • 注解开发依赖注入
      • 第三方bean管理
        • 第三方bean管理
        • 第三方bean注入
      • 注解开发总结
    • Spring整合
      • 整合mybatis
      • 整合Junit
    • AOP
      • AOP核心概念
      • AOP入门案例
      • AOP工作流程
        • AOP核心概念
        • 代理模式补充
          • 设计模式
          • 结构型模式
            • 接口模式
            • 代理模式
      • AOP切入点表达式
          • 语法格式
      • AOP的通知类型
        • 测量业务层接口万次执行效率
      • AOP通知获取数据
        • 获取参数
        • 获取返回值
        • 获取异常
      • 案例——百度网盘密码数据兼容处理
      • AOP总结
    • Spring事物
      • Spring事物简介
        • 设置方法
        • 方法总结
      • Spring事物角色
      • Spring事物属性
        • 事物配置
        • 实例:转账业务追加日志
        • 事物传播行为

前言

  • 直接截图,不用自己一个一个敲,怎么快怎么来,然后代码项目,自己把他注释掉,自己在敲一遍。

其他

Spring加载properties

替换配置中value值,从properties中进行读取。
在这里插入图片描述
在这里插入图片描述

  • 按照下述最标准的格式进行书写,可以同时类路径下方的所有的文件

<context:property-placeholder location="classpath😗.properties" system-properties-mode=“NEVER”/>*

  • 创建对应的properties
    在这里插入图片描述
  • 在配置中申请一个新的命名空间context
    • 直接复制对应的两行,然后修改对应关键字即可

在这里插入图片描述

  • 使用属性占位符读取properties中的属性
    • 使用和properties同样名称的jdbc进行索引即可

在这里插入图片描述

  • 运行效果如下

在这里插入图片描述

容器

创建容器

在这里插入图片描述

获取bean

在这里插入图片描述

BeanFactory

  • BeanFactory是ApplicationContext最顶级的接口创建对象全是延迟加载

在这里插入图片描述

容器总结

  • 容器接口

在这里插入图片描述

  • Bean相关
    在这里插入图片描述

  • 注入相关
    在这里插入图片描述

注解

注解开发对定义bean

在这里插入图片描述

  • 衍生注解

在这里插入图片描述
在这里插入图片描述

纯注解开发

  • 使用congfig类替代配置xml
    在这里插入图片描述

在这里插入图片描述

  • 创建容器的方式也改变了,是通过注解创建容器,不是通过配置创建的容器的。
    在这里插入图片描述

Bean管理

Bean作用范围

在这里插入图片描述

Bean生命周期

在这里插入图片描述

注解开发依赖注入

  • 使用注解进行自动装配
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

  • 简单类型如何进行注入

在这里插入图片描述

  • 如何加载外部的properties中的属性值
    在这里插入图片描述

第三方bean管理

第三方bean管理

在这里插入图片描述

  • 使用独立的配置类加入核心配置
    在这里插入图片描述
    在这里插入图片描述
第三方bean注入

在这里插入图片描述

注解开发总结

在这里插入图片描述

Spring整合

整合mybatis

*

  • 核心对象是SqlSessionFactoryBuilder,这个工厂用来用来创建不同的session链接,主要设置来自于配置文件

在这里插入图片描述

  • Mybatis主要是负责SqlSessionFactory对象的

在这里插入图片描述
在这里插入图片描述

整合Junit

在这里插入图片描述

AOP

AOP核心概念

  • 面向切面编程,Aspect Oriented Programming,面向切面编程,一种编程范式,知道开发者组织程序结构
  • 作用:在不惊动原始设计的基础上,为其进行功能增强
  • Spring理念:无入侵式编程,并没有改变代码,但是代码的功能发生了变化

具体概念如下
在这里插入图片描述

在这里插入图片描述

AOP入门案例

*

  • 结合之前的代码进行分析,主要是制作共性功能,也就是通知类和通知的制作
  • 具体定义流程
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

AOP工作流程

在这里插入图片描述

  • 获取bean执行方法
    • 获取bean,调用方法并执行,完成操作
    • 获取的bean是代理对象时
AOP核心概念
  • 目标对象

    • 原始功能去掉共性功能对应的类产生的对象,这种对象是无法直接完成最终工作的
  • 代理

    • 目标对象无法直接完成工程,需要对其进行功能回填,通过原始对象的代理对象实现。
代理模式补充
设计模式
  • 开闭原则
    • 对扩展开放,对修改关闭
  • 里氏替换原则
    • 调用一个父类的方法可以成功,那么替换成子类的调用也应该可以完全成功
结构型模式
接口模式
  • 如果要求传入的接口是A接口,但是传入的是B接口,需要创建一个能够将B接口转为A接口的东西。
    *
  • 这里是想用线程调用接口runnable的,但是这里实现的是callable接口,就需要创建一个类,将callable转成runnable。
  • 下述是实现了runnable接口,然后转成在run函数里面调用了runnable接口的call函数
    *
    在这里插入图片描述
代理模式
  • 调试器是将接口A转成接口B,但是代理模式是在接口A外面再套一层壳,为了执行权限检查等特定功能
    • 下述就是对接口A增加了权限检查的功能
  • 编程原则:
    • 职责清晰:一个类只负责一件事
    • 易于测试:一次只检查一个功能
public class AProxy implements A {
    private A a;
    public AProxy(A a) {
        this.a = a;
    }
	public void a() {
   		 if (getCurrentUser().isRoot()) {
       		 this.a.a();
    	} else {
        	throw new SecurityException("Forbidden");
    }
	}
}

常见的代理方式

  • 远程代理

    • 本地的调用者持有的接口实际上是一个代理,这个代理负责把对接口的方法访问转换成远程调用,然后返回结果。Java内置的RMI机制就是一个完整的远程代理模式。
  • 虚代理

    • 它让调用者先持有一个代理对象,但真正的对象尚未创建。如果没有必要,这个真正的对象是不会被创建的,直到客户端需要真的必须调用时,才创建真正的对象
    • JDBC的连接池返回的JDBC连接(Connection对象)就可以是一个虚代理,即获取连接时根本没有任何实际的数据库连接,直到第一次执行JDBC查询或更新操作时,才真正创建实际的JDBC连接
      后面有点负责,不过先跳过,先弄明白这章再说

AOP切入点表达式

语法格式

在这里插入图片描述
在这里插入图片描述

  • 下述是两种写法,一种是接口写法,还有一种是实现类的写法

在这里插入图片描述

  • 下述.是零个或者多个,但是*是必有一个
    • 第三种子类说明是不常用的

在这里插入图片描述
在这里插入图片描述

  • 书写技巧
    • 切入点描述通常使用接口,主要是为了降低耦合性,不要指定具体的描述类
  • 在这里插入图片描述

AOP的通知类型

  • 重点是环绕通知around,通过该通知能够实现前置通知和后置通知。
    在这里插入图片描述
  • 必须要增加对于原始方法的调用,实现隔离操作。
  • 因为没有办法预知原始方法是否会抛出异常,所以需要处理异常。
    在这里插入图片描述
    在这里插入图片描述
测量业务层接口万次执行效率
  • 在cofig中摊开AOP的注解文件
    在这里插入图片描述
  • 创建对应的AOP文件,同时定义方法
    • 这个方法有一个问题,就是没有办法根据输出定位到具体的方法,所以需要输出具体around方法的名称。在这里插入图片描述
  • 最终修改如下

在这里插入图片描述

AOP通知获取数据

在这里插入图片描述
在这里插入图片描述

获取参数

在这里插入图片描述

使用before获取参数,传入JointPoint对象,进行获取

@Before("pt()")
public void before(JoinPoint jp){
    Object[] args = jp.getArgs();
    System.out.println(Arrays.toString(args));
    System.out.println("before advice...");

}

输入校验

  • 可以获取参数,并进行检查,然后对参数进行处理,不需要对于每一个参数都执行相应的操作
 @Around("pt()")
    public Object around(ProceedingJoinPoint pjp) {
        Object[] args = pjp.getArgs();
        System.out.println(Arrays.toString(args));
        args[0] = 666;
        System.out.println(Arrays.toString(args));
        
        Object ret = null;
        try {
            ret = pjp.proceed(args);
        } catch (Throwable t) {
            t.printStackTrace();
        }
        return ret;
    }

在这里插入图片描述

获取返回值
  • 下述参数比较特殊,需要在配置中进行说明
    • 第一个参数必须是JointPoint
      在这里插入图片描述
      在这里插入图片描述
获取异常

在这里插入图片描述
在这里插入图片描述

案例——百度网盘密码数据兼容处理

在这里插入图片描述

AOP总结

在这里插入图片描述

  • 切入点的描述
    在这里插入图片描述
  • 切入点描述的技巧

在这里插入图片描述

  • 通知的五种类型

在这里插入图片描述

  • 获取参数的相关方法

在这里插入图片描述

Spring事物

Spring事物简介

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

设置方法
  • 声明事物的属性
    在这里插入图片描述
  • 定义事物管理器
    • 外部资源注入

在这里插入图片描述

  • 到spring的配置文件中,使用注解注入
    在这里插入图片描述
方法总结

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

Spring事物角色

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

Spring事物属性

事物配置

在这里插入图片描述

  • 默认一般只有运行时异常才会回滚,其他不会回滚,所以需要加上
实例:转账业务追加日志

在这里插入图片描述

在这里插入图片描述

事物传播行为

在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Mybatis实现树形结构方式

1&#xff0c;三级分类树形结构查询 /*** DDD(Domain-Driven Design): 领域驱动设计** 三级分类树形结构&#xff1b;* 支持无限层级&#xff1b;* 当前项目只有三级*/ Data public class CategoryTreeTo {private Long categoryId; //1private String categoryName;private …

外观数列 ---- 模拟

题目链接 题目: 分析: 题目的意思如下:所以我们需要引用双指针来找到连续的字符有几个, 并添加到答案中, 接着将此字符添加到答案中, 让left right , 继续向后遍历整个字符串, 重复上面的操作将答案重新赋给字符串, 继续重复上述操作, 应该重复n - 1 次, 因为n为1的时候, 直…

上网是不是必须路由器和光猫之一负责拨号?

链接&#xff1a;https://www.zhihu.com/question/624856022/answer/3245182557 上网并非一定要“拨号”&#xff0c;使用固定IP地址可以直接上网&#xff0c;不需要拨号。你们公司的宽带属于商用宽带&#xff0c;运营商&#xff08;电信&#xff09;给配置了固定的IP&#…

如何监控企业微信聊天记录内容,第二个方法太赞了!

监控企业微信聊天记录内容是企业为了确保沟通合规、提升工作效率、防止信息泄露以及保护公司利益而采取的一种管理措施。在当前的中国&#xff0c;是法律允许的合法行为。 怎么监控&#xff1f;请看下面详情。 1. 利用企业微信自带功能 企业会话存档&#xff1a; 企业微信提…

43页 | 2024年企业级BI平台白皮书(免费下载)

【1】关注本公众号&#xff0c;转发当前文章到微信朋友圈 【2】私信发送 2024年企业级BI平台白皮书 【3】获取本方案PDF下载链接&#xff0c;直接下载即可。 诚挚邀请您微信扫码加入以下方案驿站知识星球&#xff0c;获取上万份PPT/WORD解决方案&#xff01;&#xff01;&…

【Python Cookbook】S01E16 同时对数据做转换和换算

目录 问题解决方案讨论 问题 当换算&#xff08;sum(), min(), max()&#xff09;同时遇到转换或筛选&#xff0c;怎么做&#xff1f; 解决方案 有一种非常优雅的方法&#xff0c;可以将数据换算和转换结合在一起——在函数参数中使用 生成器表达式。 一个直观的案例&#…

YOLOv8+PyQt5海洋船只检测(可以重新训练,yolov8模型,从图像、视频和摄像头三种路径识别检测)

1.效果视频&#xff1a;海洋船只检测yoloV8检测&#xff08;https://mbd.pub/o/bread/mbd-ZpaYk55r&#xff09;_哔哩哔哩_bilibili资源包含可视化的海洋船只检测系统&#xff0c;可对于高空拍摄到的海洋图片进行轮船检测&#xff0c;基于最新的YOLOv8训练的海洋船只检测模型&a…

Facebook开户|FB10大提升视频广告效果实践

Facebook10大提升视频广告效果实践&#xff01;&#xff01;需要的家人们建议点赞收藏哦~ 一、在前3秒吸引注意力 在视频广告推广活动中&#xff0c;一直都有黄金3秒的说法&#xff0c;指的就是通过前三秒的制作&#xff0c;吸引观众的注意。吸引人的画面、个性的CTA、独特性和…

C语言| 字母金字塔

【思路分析&#xff1a;】 1 考虑左边的空格大写字母&#xff0c;而大写字母 先升序后降序输出 2 升序输出的字母的个数行数最大字母在26个英文字母中排的位置序号 3 降序输出的字母 升序输出的字母个数-1 编程顺序&#xff1a; 1 定义循环变量i,表示字母的顺序,循环变量j 表…

软件测试之黑盒测试与白盒测试知识小结

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 对于很多刚开始学习软件测试的小伙伴来说&#xff0c;如果能尽早将黑盒、白盒测试弄明白&#xf…

Makefile的入门学习

一、Makefile的入门学习 编译工具及构建工具介绍 在之前的课程&#xff0c;都是直接使用gcc对代码进行编译&#xff0c;这对简单的工程是可以的&#xff0c;但当我们遇到复杂的工程时&#xff0c;每次用gcc等编译工具去操作就会显得很低效。因此make工具就出现了&#xff0c;…

MYSQL之主从复制

一&#xff0c;安装MYSQL&#xff0c;两台 二&#xff0c;配置master服务器 vim /etc/my.cnf 在mysqld模块下加入 server-id133 #配置server-id&#xff0c;让主服务器有唯一ID号&#xff08;让从服务器知道 他的主服务器是谁&#xff09;,建议使用ip最后3位 log-binmysql-bi…

coze扣子自定义插件开发

之前用过阿里云的&#xff0c;阿里云的插件填写的内容有点复杂 今天体验coze&#xff0c;没想到如此简单&#xff1b; 访问地址&#xff1a;扣子&#xff0c;注册对应账户&#xff0c;并创建对应空间&#xff1b; 第一步&#xff1a;点击插件&#xff0c;新建插件 选择不需要…

OpenHarmony嵌套类对象属性变化:@Observed装饰器和@ObjectLink装饰器

上文所述的装饰器仅能观察到第一层的变化&#xff0c;但是在实际应用开发中&#xff0c;应用会根据开发需要&#xff0c;封装自己的数据模型。对于多层嵌套的情况&#xff0c;比如二维数组&#xff0c;或者数组项class&#xff0c;或者class的属性是class&#xff0c;他们的第二…

代码随想录算法训练营第四十八天 | 70. 爬楼梯 (进阶)、322. 零钱兑换、279.完全平方数

70. 爬楼梯 &#xff08;进阶&#xff09; 代码随想录 解题思路 1.确定dp数组以及下标的含义 dp[i]&#xff1a;爬到有i个台阶的楼顶&#xff0c;有dp[i]种方法 2.递推公式 dp[j] dp[j - nums[i] ] 装满背包有多少种方法一般用这个 3.遍历顺序 完全背包&#xff0c;且…

Java面试——中间件

OpenFeign 1、openFeign是一个HTTP客户端&#xff0c;它融合了springmvc的注解&#xff0c;使之可以用REST风格的映射来请求转发。 2、可以把openFegin理解为是controller层或是service层。可以取代springmvc控制层作为请求映射&#xff0c;亦或是作为service层处理逻辑&#…

《网络安全技术 生成式人工智能服务安全基本要求》征求意见稿

1. 训练数据安全要求 &#xff08;1&#xff09;数据来源安全&#xff1a; 采集来源管理&#xff1a; 采集数据前应进行安全评估&#xff0c;含违法不良信息超过5%的数据源不得使用。 采集后需核验&#xff0c;含违法不良信息超过5%的数据不得用于训练。 不同来源训练数据搭…

kafka-集群-主题创建

文章目录 1、集群主题创建1.1、查看 efak1.2、创建 主题 my_topic1 并建立6个分区并给每个分区建立3个副本1.2.1、查看 my_topic1 的详细信息 1.3、停止 kafka-01实例&#xff0c;端口号为 9095 1、集群主题创建 1.1、查看 efak 已经有三个kafka实例 1.2、创建 主题 my_topic1…

C语言(数据存储)

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸各位能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎~~ &#x1f4a5;个人主页&#xff1a;小羊在奋斗 &#x1f4a5;所属专栏&#xff1a;C语言 本系列文章为个人学习笔记&#xff0c;在这里撰写成文一…

windows上安装jdk1.8

这篇文章详细地介绍如何在windows上安装jdk1.8 目录 准备工作 第一步 第二步 第三步 第四步 第五步 最后的效果 查看JDK版本 准备工作 下载jdk&#xff1a;通过官网或者以下百度网盘链接下载jdk1.8 链接&#xff1a;https://pan.baidu.com/s/1zuMl0B-S6SDgiu1evw-IPQ?…