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插件.
jt-day01 AOP业务

2.2.2 创建SpringBoot项目

1).选择插件
jt-day01 AOP业务
2).编辑项目名称
jt-day01 AOP业务
3).勾选依赖项
jt-day01 AOP业务
4).初始化项目
jt-day01 AOP业务
5).执行main方法检查运行是否正常
jt-day01 AOP业务
如图所示表示程序正常.
jt-day01 AOP业务

2.2.3 如果项目创建出问题

1).检查系统环境变量JDK
jt-day01 AOP业务
2).检查maven配置
jt-day01 AOP业务

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 项目打包

jt-day01 AOP业务

2.4.2 java命令运行项目

1.将jar包文件放置到指定的目录下.
jt-day01 AOP业务
2.dos命令
1.cd 切换目录
2.dir 查看当前目录结构
3.cls 清屏

3.java命令
jt-day01 AOP业务
项目关闭:
1.直接将dos窗口关闭
2. ctrl + c 万能的关闭指令

2.5 关于jar包依赖传递性

2.5.1 问题描述

问题: 当引入webjar包时, 其他jar包文件如何依赖的?
jt-day01 AOP业务

2.5.2 maven jar包依赖的传递性

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

maven原理说明:
1.当maven解析pom.xml文件时,会根据maven坐标查找指定的jar包文件. jt-day01 AOP业务
2.当jar包加载完成之后,由于该项目也是maven工程,所以maven工具会解析该项目的pom.xml文件
根据POM.xml文件 再次加载依赖包 直到所有的jar包依赖加载完成
jt-day01 AOP业务

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

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

关于hash问题:
jt-day01 AOP业务

核心原理说明:
判断传递前后的sha1算法是否相同,如果相同则标识传输正常,
如果不同,则文件有问题.
jt-day01 AOP业务

3. SpringBoot学习

3.1 配置文件说明

3.1.1 关于properties文件说明

说明: 虽然pro文件是SpringBoot默认配置文件.但是其中编码格式比较繁琐,不便于查看.所以在项目中一般使用YML文件.
jt-day01 AOP业务

3.1.2 关于yml文件说明

jt-day01 AOP业务

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对象赋值

jt-day01 AOP业务

3.2.4 编辑springBoot测试类

jt-day01 AOP业务

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

3.3 利用properties文件为属性赋值

3.3.1 编辑pro文件

jt-day01 AOP业务

3.3.2 实现自动赋值

jt-day01 AOP业务

3.4 lombok插件

3.4.1 安装插件

jt-day01 AOP业务

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注解使用

jt-day01 AOP业务

jt-day01 AOP业务

上一篇:day01_UI自动化测试入门


下一篇:通过Nginx和Nginx Plus阻止DDoS攻击