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

5. AOP

一、如何定义一个MethodHandler?

1.@Controller注解修饰的类

    1.注册成Spring Bean

     2.表示它是一个SpringMVC下的Controller

2.在这个类下的方法中,只要被@RequestMapping修饰&&方法的形参符合规定(需要看文档) + 方法的返回值符合规定 (需要看文档)

1.不用在意方法的名字

2.不用在意方法的返回值签名


@RequestMapping(value = path)  ==  @RequestMapping(path)

变形如下:

@RequestMapping(value = path, method = GET/POST)

@GetMapping / @PostMapping

@RequestMapping修饰类,直接给这个类的所有方法前面添加统一的URL path前缀


支持的方法形参:

1.原生的Servlet模式

void...(HttpServletRequest req, HttpServletResponse resp);

2.@RequestParam(...)注解修饰的    请求参数

   修饰形参时,@RequestParam可以省略,表示形参的值来自请求参数

   默认情况下String,也可以使用其他基本类型替换

3.HttpSession


二、什么是UUID

UUID是通用唯一识别码的缩写,是一种软件建构的标准。目的是让分布式系统中的所有元素都能有唯一的辨识信息,不需要中央控制器来做辨识信息的指定。每个人都可以创建与其他人不冲突的UUID,就不需要考虑数据库创建时的名称重复问题。

比如,临时文件的文件名就是UUID形成的。

三、redirect 和 forward有啥区别?

重定向:买《暗杀》,老师告诉你应该买《活着》,又去买《活着》了

            有两次HTTP请求

转发:买《暗杀》,老师找了一本《活着》换成《暗杀》的名字给你

           只有一次HTTP请求

MVC能工作的前提:引入thymeleaf依赖

如果不引入,返回的所有view-name都被视为forward

四、AOP

AOP:并不是spring独有的功能,只是一种理念。

AOP——靠对象代理完成

对象代理能力:AOP、Mybatis

JDK原生提供的对象代理能力,只能作用到接口上,必须要有一个接口(限制比较大),所以,由第三方库CHLib,专门去做对象代理,功能更强大!

从代码组织的角度,这种代码的组织方式有缺点,如果公共部分要重构,则需要调整一堆源码文件。(改动越多,出错的风险越大)

使用Spring中AOP。Spring并没有支持所有的概念,是AOP的概念。

1.要使用AOP需要修改依赖关系:

2.如何定义一个切面?

1.首先把类注册到spring@Component
2.需要声明这个类是一个 切面类
如果导入的时候没有@Aspect 注解,说明你忘记更改pom.xml中的spring-boot-starter-aop@Aspect
//这样,就定义了一个切面出来public class MyAspect {

 对象代理(使用Proxy对象,替代Target对象)

调用的时候,优先把控制权交给Proxy去处理

配合IOC,功能更强大了。

功能上,实现AOP +Mybatis原理

AOP是面向切面编程。(切面、切点、通知)(编织、连接点...)

编织:  JDK原生 /  CGLib

使用:@Aspect + @Component定义切面类

          @Pointcut("...")   定义切点(表现在Spring中是一个方法体,方法体是空的)

          表达式:        "execution(...)"          "annotation(...)"

通过@Before、@AfterThrowing、@Around定义通知(Advice)

AOP能生效,原理就是对象代理在起作用。  切面、切点、通知缺一不可 && 不能通过this调用

 

http://www.lryc.cn/news/11453.html

相关文章:

  • ubuntu上尝试libpqxx库链接人大金仓
  • 【Python入门第十二天】Python 列表
  • Android 异步操作库 RxJava
  • 2021-12-05青少年软件编程(C语言)等级考试试卷(六级)解析
  • github 使用
  • Kubernetes集群维护—备份恢复与升级
  • 前端开发常用案例(二)
  • 基于springboot+vue的儿科保健计划免疫系统
  • 1.两数之和
  • 字符串匹配 - 模式预处理:KMP 算法(Knuth-Morris-Pratt)
  • 工程师手册:电源设计中的电容选用规则
  • 【安全开发】专栏文章汇总
  • 视频监控流程图4
  • 「JVM 编译优化」Java 语法糖(泛型、自动装箱/拆箱、条件编译)
  • Linux下的进程控制
  • QT 文件监视系统QFileSystemWatcher监视目录的改变directoryChanged和监视文件的改变fileChanged
  • Typescript基础知识(类型断言、类型别名、字符串字面量类型、枚举、交叉类型)
  • Windows系统扩充C盘空间系列方法总结
  • 华为OD机试 - 跳格子(Python)
  • Java配置文件的值注入
  • SAP 订单BOM与销售BOM的区别
  • 支付宝支付详细流程
  • TCP 的演化史-fast retransmit/recovery
  • CSS基础选择器,你认识多少?
  • ChatGPT入门案例|商务智能对话客服(三)
  • Matlab 最小二乘法拟合平面(SVD)
  • AtCoder Regular Contest 126 D题题解
  • Android R WiFi热点流程浅析
  • 【C++进阶】二、多态详解(总)
  • node-sass@4.14.1 包含风险, 如何升级依赖至 dart-sass