您好,欢迎访问代理记账网站
  • 价格透明
  • 信息保密
  • 进度掌控
  • 售后无忧

jt-day01 AOP业务

1. 缓存控制

1.1 业务说明

用户有一个缓存的集合 static Map<k:v> key=id号 value=User对象 根据id将User对象进行了缓存
要求:当用户第二次根据Id查询用户时,如果缓存中有数据,则直接返回!!!

1.2 业务分析

1).首选用AOP方式实现
2).通知方法: 使用环绕通知
3).切入点表达式: execution(…)

1.3 AOP切面实现

package com.jt.aop;

import com.jt.pojo.User;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.Map;

@Component
@Aspect
public class SpringAOP {

<span class="token keyword">private</span> <span class="token keyword">static</span> Map<span class="token generics function"><span class="token punctuation">&lt;</span>Integer<span class="token punctuation">,</span>User<span class="token punctuation">&gt;</span></span> map <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">HashMap</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">/**
 * 需求: 用户第一次查询走目标方法
 *       用户第二次查询走缓存  不执行目标方法
 * 判断依据: 如何判断用户是否为第一次查询?
 *       通过map集合进行判断 有数据 证明不是第一次查询
 * 执行步骤:
 *       1.获取用户查询的参数
 *       2.判断map集合中是否有该数据.
 *       true:  从map集合中get之后返回
 *       false: 执行目标方法,之后将user对象保存到Map中
 */</span>

<span class="token comment">//切入点表达式: 拦截service包中的所有方法</span>
<span class="token annotation punctuation">@Around</span><span class="token punctuation">(</span><span class="token string">"execution(* com.jt.service..*.*(..))"</span><span class="token punctuation">)</span>
<span class="token keyword">public</span> Object <span class="token function">around</span><span class="token punctuation">(</span>ProceedingJoinPoint joinPoint<span class="token punctuation">)</span> <span class="token keyword">throws</span> Throwable <span class="token punctuation">{<!-- --></span>
    Object result <span class="token operator">=</span> null<span class="token punctuation">;</span>
    <span class="token comment">//1.获取目标对象的参数</span>
    Object<span class="token punctuation">[</span><span class="token punctuation">]</span> args <span class="token operator">=</span> joinPoint<span class="token punctuation">.</span><span class="token function">getArgs</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token comment">//2.强制类型转化为对象</span>
    User user <span class="token operator">=</span> <span class="token punctuation">(</span>User<span class="token punctuation">)</span> args<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
    <span class="token comment">//3.判断map集合中是否有该数据  user的Id是唯一标识</span>
    <span class="token keyword">int</span> id <span class="token operator">=</span> user<span class="token punctuation">.</span><span class="token function">getId</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token keyword">if</span><span class="token punctuation">(</span>map<span class="token punctuation">.</span><span class="token function">containsKey</span><span class="token punctuation">(</span>id<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{<!-- --></span>
        <span class="token comment">//map中有数据</span>
        System<span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"AOP缓存执行"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token comment">//将获取的数据返回</span>
        <span class="token keyword">return</span> map<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span>id<span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span><span class="token keyword">else</span><span class="token punctuation">{<!-- --></span>
        <span class="token comment">//map中没有数据 执行目标方法</span>
        result <span class="token operator">=</span> joinPoint<span class="token punctuation">.</span><span class="token function">proceed</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token comment">//将user对象保存到Map中</span>
        map<span class="token punctuation">.</span><span class="token function">put</span><span class="token punctuation">(</span>id<span class="token punctuation">,</span> user<span class="token punctuation">)</span><span class="token punctuation">;</span>
        System<span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"AOP执行目标方法"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
    <span class="token keyword">return</span> result<span class="token punctuation">;</span>
<span class="token punctuation">}</span>

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54

2.SpringBoot

2.1 SpringBoot介绍

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。

作用: SpringBoot的推出 让程序员更加专注于业务处理, SpringBoot是学习微服务框架基石
Spring 和SpringBoot关系 :
SpringBoot是Spring的工具API框架

2.2 SpringBoot入门案例

2.2.1 安装SpringBoot插件

1).IDEA破解版本,自带SpringBoot插件 所以无需安装
2).IDEA社区版本.需要手动安装一个SpringBoot插件.
在这里插入图片描述

2.2.2 创建SpringBoot项目

1).选择插件
在这里插入图片描述
2).编辑项目名称
在这里插入图片描述
3).勾选依赖项
在这里插入图片描述
4).初始化项目
在这里插入图片描述
5).执行main方法检查运行是否正常
在这里插入图片描述
如图所示表示程序正常.
在这里插入图片描述

2.2.3 如果项目创建出问题

1).检查系统环境变量JDK
在这里插入图片描述
2).检查maven配置
在这里插入图片描述

2.3 关于SpringBoot项目说明

2.3.1 关于POM.xml文件说明

<!--1.parent标签  父级工程
			SpringBoot将现有主流的框架都进行了整合,
			在内部完成了jar包的依赖的配置.如果用户需要,则只添加某些核心包
			那么所有的依赖都会按照规则自动的下载.
	-->
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.4.5</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

2.3.2 依赖配置项

<!--Springboot通过启动项的方法的 进行jar包文件的加载.
			同时这些功能中的配置项 SpringBoot有些也会自动的完成.
			无特殊的要求 无需手动的配置.
			开箱即用的思想!!!!
		-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

2.3.3 build标签

<!--
		关于build标签说明
		1.build标签它是maven工程的要求.
		2.作用: 完成项目的打包/发布等一系列的功能.
		3.该标签的使用是SpringBoot必须的,如果没有该标签则项目无法使用jar包运行
	-->
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

2.4 SpringBoot Maven操作

2.4.1 项目打包

在这里插入图片描述

2.4.2 java命令运行项目

1.将jar包文件放置到指定的目录下.
在这里插入图片描述
2.dos命令
1.cd 切换目录
2.dir 查看当前目录结构
3.cls 清屏

3.java命令
在这里插入图片描述
项目关闭:
1.直接将dos窗口关闭
2. ctrl + c 万能的关闭指令

2.5 关于jar包依赖传递性

2.5.1 问题描述

问题: 当引入webjar包时, 其他jar包文件如何依赖的?
在这里插入图片描述

2.5.2 maven jar包依赖的传递性

例子:
1. A.jar ----> B.jar
2. B.jar -----> C.jar

maven原理说明:
1.当maven解析pom.xml文件时,会根据maven坐标查找指定的jar包文件. 在这里插入图片描述
2.当jar包加载完成之后,由于该项目也是maven工程,所以maven工具会解析该项目的pom.xml文件
根据POM.xml文件 再次加载依赖包 直到所有的jar包依赖加载完成
在这里插入图片描述

2.5.3 maven 如何保证jar包依赖安全性(了解)

算法: SHA1
SHA-1(英语:Secure Hash Algorithm 1,中文名:安全散列算法1)是一种密码散列函数,美国国家安全局设计,并由美国国家标准技术研究所(NIST)发布为联邦数据处理标准(FIPS)。SHA-1可以生成一个被称为消息摘要的160位(20字节)散列值,散列值通常的呈现形式为40个十六进制数

关于hash问题:
在这里插入图片描述

核心原理说明:
判断传递前后的sha1算法是否相同,如果相同则标识传输正常,
如果不同,则文件有问题.
在这里插入图片描述

3. SpringBoot学习

3.1 配置文件说明

3.1.1 关于properties文件说明

说明: 虽然pro文件是SpringBoot默认配置文件.但是其中编码格式比较繁琐,不便于查看.所以在项目中一般使用YML文件.
在这里插入图片描述

3.1.2 关于yml文件说明

在这里插入图片描述

3.2 @Value属性赋值

3.2.1 springBoot为属性赋值

在YML配置文件中编辑key=value结构,之后利用注解为属性赋值.

3.2.2 编辑YML配置文件

#YML文件语法
## 1.YML数据结构k-v结构
## 2.k与v 需要使用 :"空格" 连接
## 3.YMl配置文件有父子级关系 所以注意缩进项的位置
server:
  port: 8090    #配置端口
  servlet:      #web项目发布路径
    context-path: /  #/表示根目录

#定义dept属性值 YML文件默认支持UTF-8
dept:
id: 100
name: 财务部

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

3.2.3 为Dept对象赋值

在这里插入图片描述

3.2.4 编辑springBoot测试类

在这里插入图片描述

注意事项: 以后写代码都必须写到主启动类的同包及子包中

3.3 利用properties文件为属性赋值

3.3.1 编辑pro文件

在这里插入图片描述

3.3.2 实现自动赋值

在这里插入图片描述

3.4 lombok插件

3.4.1 安装插件

在这里插入图片描述

3.4.2 添加jar包

<!--引入插件lombok 自动的set/get/构造方法插件  -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>	

 
  • 1
  • 2
  • 3
  • 4
  • 5

3.4.3 lombok注解使用

在这里插入图片描述

在这里插入图片描述


分享:

低价透明

统一报价,无隐形消费

金牌服务

一对一专属顾问7*24小时金牌服务

信息保密

个人信息安全有保障

售后无忧

服务出问题客服经理全程跟进