Javaweb

注解与反射

注解

  • 在程序运行期间动态创建对象
  • 编写代码/编译的过程,不知道要创建的是哪个对象
  • 只有在运行期间才知道要创建的对象是谁
  • 动态获取类的信息,从而创建对象

反射

注解是结合反射来运行,注解只是相当于一个标识,不做具体的操作,具体操作是由反射来完成的


HTTP

概念

超文本传输协议,规定了浏览器和服务器之间数据传输的规则

特点

  • 基于TCP协议:面向连接,安全
  • 基于请求-响应模型:一次请求对应一次响应
  • HTTP协议是无状态的协议:对于事务处理没有记忆能力。每次请求-响应都是独立的。

缺点

多次请求间不能共享数据

优点

速度快


Web服务器

  • 对HTTP协议操作进行封装,简化web程序开发
  • 部署web项目,对外提供网上信息浏览服务

Tomcat

一个轻量级的web服务器,支持servlet、jsp等少量javaEE规范


请求、响应

JSON参数

JSON数据键名与形参对象属性名相同,定义POJO类型形参即可接收参数,需要使用@RequestBody标识

@ResponseBody

  • 类型:方法注解、类注解
  • 位置:Controller方法上/类上

作用

将方法返回值直接响应,如果返回值类型是实体对象/集合,将会转换为JSON格式响应 说明:@RestController=@Controller+@ResponseBody


分层解耦(高内聚低耦合)

三层架构

  • Controller:控制层,接收前端发送的请求,对请求进行处理并响应数据
  • Service:业务逻辑层,处理具体的业务逻辑
  • Dao:数据访问层,负责数据访问操作,包括增删改查

IOC:对象的创建控制权由程序自身转移到外部(容器),这种思想称为控制反转

DI:容器为应用程序提供运行时所依赖的资源,称为依赖注入(@Autowired)


Bean

Bean对象

IOC容器中创建、管理的对象,成为bean

Bean注册

  • @Component:不属于以下三类时,用此注解
  • @Controller:控制层
  • @Service:服务层
  • @Mapper:持久层

Bean组件扫描

  • 声明bean的四大注解,要想生效,还需要被组件扫描注解@ComponentScan扫描
  • @CompontScan注解虽然没有显式配置,但实际上已经包含在了启动类声明注解@SpringBootApplication中,默认扫描的范围是启动类所在包及其子包

第三方Bean

  • 如果要管理的bean对象来自于第三方(非自定义),无法用@Component及衍生注解声明bean的,就需要用到@Bean注解
  • 若要管理第三方bean对象,建议对这些bean进行集中分类配置,可以通过@Configuration注解声明一个配置类
  • 通过@Bean注解的name或value属性可以声明bean的名称,如果不指定,默认bean的名称就是方法名
  • 如果第三方bean需要依赖其他bean对象,直接在bean定义方法中设置形参即可,容器会根据类型自动装配

Maven

Maven是一个项目管理和构建工具,它基于项目对象模型(POM)的概念,通过一小段描述信息来管理项目的构建。

作用

方便的依赖管理、统一的项目结构、标准的项目构建流程


登录校验

会话跟踪

服务器需要识别多次请求是否来自同一浏览器,以便在同一次会话的多次请求间共享数据

方案

  • Cookie:移动app无法使用,不安全,用户可自己禁用,不能跨域
  • Session:安全,但具有cookie的所有缺点
  • 令牌技术:解决集成环境下的认证问题,减轻服务器存储压力,支持pc端和移动端

JWT令牌

场景:登录认证

  1. 登录成功后,生成令牌
  2. 后续每个请求,都要携带JWT令牌,系统在每次请求处理之前,先校验令牌,通过后,再处理

Filter过滤器

概念

Javaweb三大组件(Servlet、Filter、Listener)之一,能拦截所有资源。

作用

  • 可以把对资源的请求拦截下来,从而实现一些特殊的功能
  • 一般完成一些通用的操作,如登录校验、统一编码处理、敏感字符处理等

Interceptor拦截器

概念

一种动态拦截方法调用的机制,类似于过滤器。Spring框架中提供的,用来动态拦截控制器方法的执行,只会拦截Spring环境中的资源。

作用

拦截请求,在指定的方法调用前后,根据业务需要执行预先设定的代码


异常处理

全局异常处理器

@RestControllerAdvice、@ExceptionHandler


事务管理

事务

一组操作的集合,是一个不可分割的工作单位,这些操作要么同时成功,要么同时失败

@Transactional

将当前方法交给spring进行事务管理

  1. 方法执行前,开启事务
  2. 成功执行完毕,提交事务
  3. 出现异常,回滚事务

rollbackFor

默认情况下,只有出现RuntimeException才回滚异常。rollbackFor属性用于控制出现何种异常类型时才回滚事务。

propagation

  • REQUIRED:【默认值】需要事务,有则加入,无则创建新事物
  • REQUIRES_NEW:需要新事物,无论有误,总是创建新事务
  • SUPPORTS:支持事务,有则加入,无则在无事务状态中运行
  • NOT_SUPPORTED:不支持事务,在无事务状态下运行,如果当前存在已有事务,则挂起当前事务
  • MANDATORY:必须有事务,否则抛异常
  • NEVER:必须没事务,否则抛异常

AOP

概念

Aspect Oriented Programming(面向切面编程),其实就是面向特定方法编程

应用场景

  • 记录操作日志
  • 权限控制
  • 事务管理

优势

  • 代码无侵入
  • 减少重复代码
  • 提高开发效率
  • 维护方便

实现

动态代理是面向切面编程最主流的实现。而SpringAOP是Spring框架的高级技术,旨在管理bean对象的过程中,主要通过底层的动态代理机制,对特定的方法进行编程

核心概念

  • 连接点(JoinPoint):可以被AOP控制的方法(暗含方法执行时的相关信息)
  • 通知(Advice):指那些重复的逻辑,也就是共性功能(最终体现为一个方法)
  • 切入点(PointCut):匹配连接点的条件,通知仅会在切入点方法执行时被应用
  • 切面(Aspect):描述通知与切入点的对应关系(通知+切入点)
  • 目标对象(Target):通知所应用的对象

通知类型

  • @Around:环绕通知,此注解标注的通知方法在目标方法前、后都被执行
  • @Before:前置通知,此注解标注的通知方法在目标方法前被执行
  • @After:后置通知,此注解标注的通知方法在目标方法后被执行,无论是否有异常都会执行
  • @AfterReturning:返回后通知,此注解标注的通知方法在目标方法后被执行,有异常不会执行
  • @AfterThrowing:异常后通知,此注解标注的通知方法发生异常后执行

注意事项

  • @Around环绕通知需要自己调用ProceedingJoinPoint.proceed()来让原始方法执行,其他通知不需要考虑目标方法执行
  • @Around环绕通知方法的返回值必须指定为Object来接受原始方法的返回值

切入点表达式

execute

@annotation


swagger

常用注解

  • @Api 用在类上,例如Controller,表示对类的说明
  • @ApiModel 用在类上,例如entity、DTO、VO
  • @ApiModelProperty 用在属性上,描述属性信息
  • @ApiOperation 用在方法上,例如Controller的方法,说明方法的用途、作用

ThreadLocal

Thread的局部变量,为每个线程提供单独一份存储空间,具有线程隔离的效果,只有在线程内才能获取到对应的值,线程外则不能访问

常用方法

  • public void set(T value) 设置当前线程的线程局部变量的值
  • public T get() 返回当前线程所对应的线程局部变量的值
  • public void remote() 移除当前线程的线程局部变量
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇