java函数式编程举例,深度好文

Posted springboot全家桶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java函数式编程举例,深度好文相关的知识,希望对你有一定的参考价值。

AOP简介

AOP (Aspect Oriented Programing) 称为:面向切面编程,它是一种编程思想。AOP 是 OOP(面向对象编程 Object Oriented Programming)的思想延续

AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码的编写方式(例如性能监视、事务管理、安全检查、缓存、日志记录等)

AOP核心思想

基于代理思想,对原来目标对象,创建代理对象,在不修改原对象代码情况下,通过代理对象,调用增强功能的代码,从而对原有业务方法进行增强

切面:需要代理一些方法和增强代码

AOP的应用场景

场景一:记录日志

场景二:监控方法运行时间 (监控性能)

场景三: 权限控制

场景四: 缓存优化 (第一次调用查询数据库,将查询结果放入内存对象, 第二次调用, 直接从内存对象返回,不需要查询数据库 )

场景五: 事务管理 (调用方法前开启事务, 调用方法后提交或者回滚、关闭事务 )

Spring AOP编程两种方式

方式一:Spring AOP使用纯Java实现,不需要专门的编译过程和类加载器,在运行期通过代理方式向目标类植入增强代码(编程复杂,不推荐)

方式二:Spring 2.0 之后支持第三方 AOP框架(AspectJ ),实现另一种 AOP编程 (推荐)

AOP编程相关术语

1.Aspect(切面): 是通知和切入点的结合,通知和切入点共同定义了关于切面的全部内容—它的功能、在何时和何地完成其功能

2.joinpoint(连接点):所谓连接点是指那些被拦截到的点。在spring中,这些点指的是方法,因为spring只支持方法类型的连接点.

3.Pointcut(切入点):所谓切入点是指我们要对哪些joinpoint进行拦截的定义.通知定义了切面的”什么”和”何时”,切入点就定义了”何地”.

4.Advice(通知、增强):所谓通知是指拦截到joinpoint之后所要做的事情就是通知.通知分为前置通知,后置通知,异常通知,最终通知,环绕通知(切面要完成的功能)

5.Target(目标对象):代理的目标对象

6.Weaving(织入):是指把切面应用到目标对象来创建新的代理对象的过程.切面在指定的连接点织入到目标对象

7.Introduction(引入)(不要求掌握):在不修改类代码的前提下, Introduction可以在运行期为类动态地添加一些方法或Field.

AOP编程底层实现机制

AOP 就是要对目标进行代理对象的创建, Spring AOP是基于动态代理的,分别基于两种动态代理机制: JDK动态代理和CGLIB动态代理

方式一:JDK动态代理

JDK动态代理,针对目标对象的接口进行代理 ,动态生成接口的实现类 (必须有接口)

过程要点

1.必须对接口生成代理

2.采用Proxy对象,通过newProxyInstance方法为目标创建代理对象。

该方法接收三个参数 :

(1)目标对象类加载器

(2)目标对象实现的接口

(3)代理后的处理程序InvocationHandler

3.实现InvocationHandler 接口中 invoke方法,在目标对象每个方法调用时,都会执行invoke

最后

给读者们一个小福利,有需要这些资料的朋友们可以点击我,即可免费领取资料!

ActiveMQ消息中间件面试专题

  • 什么是ActiveMQ?
  • ActiveMQ服务器宕机怎么办?
  • 丢消息怎么办?
  • 持久化消息非常慢怎么办?
  • 消息的不均匀消费怎么办?
  • 死信队列怎么办?
  • ActiveMQ中的消息重发时间间隔和重发次数吗?

ActiveMQ消息中间件面试专题解析拓展:

BAT面试文档:ActiveMQ+redis+Spring+高并发多线程+JVM


redis面试专题及答案

  • 支持一致性哈希的客户端有哪些?
  • Redis与其他key-value存储有什么不同?
  • Redis的内存占用情况怎么样?
  • 都有哪些办法可以降低Redis的内存使用情况呢?
  • 查看Redis使用情况及状态信息用什么命令?
  • Redis的内存用完了会发生什么?
  • Redis是单线程的,如何提高多核CPU的利用率?

BAT面试文档:ActiveMQ+redis+Spring+高并发多线程+JVM


Spring面试专题及答案

  • 谈谈你对 Spring 的理解
  • Spring 有哪些优点?
  • Spring 中的设计模式
  • 怎样开启注解装配以及常用注解
  • 简单介绍下 Spring bean 的生命周期

Spring面试答案解析拓展

BAT面试文档:ActiveMQ+redis+Spring+高并发多线程+JVM


高并发多线程面试专题

  • 现在有线程 T1、T2 和 T3。你如何确保 T2 线程在 T1 之后执行,并且 T3 线程在 T2 之后执行?
  • Java 中新的 Lock 接口相对于同步代码块(synchronized block)有什么优势?如果让你实现一个高性能缓存,支持并发读取和单一写入,你如何保证数据完整性。
  • Java 中 wait 和 sleep 方法有什么区别?
  • 如何在 Java 中实现一个阻塞队列?
  • 如何在 Java 中编写代码解决生产者消费者问题?
  • 写一段死锁代码。你在 Java 中如何解决死锁?

高并发多线程面试解析与拓展

BAT面试文档:ActiveMQ+redis+Spring+高并发多线程+JVM


jvm面试专题与解析

  • JVM 由哪些部分组成?
  • JVM 内存划分?
  • Java 的内存模型?
  • 引用的分类?
  • GC什么时候开始?

JVM面试专题解析与拓展!

BAT面试文档:ActiveMQ+redis+Spring+高并发多线程+JVM

  • JVM 由哪些部分组成?
  • JVM 内存划分?
  • Java 的内存模型?
  • 引用的分类?
  • GC什么时候开始?

JVM面试专题解析与拓展!

[外链图片转存中…(img-KTDQxFti-1624505190486)]

以上是关于java函数式编程举例,深度好文的主要内容,如果未能解决你的问题,请参考以下文章

深度探秘 Java 8 函数式编程(下)

java函数式编程举例,年薪超过80万!

深度探秘 Java 8 函数式编程(上)

Java面试送分题:java函数式编程举例

java链式编程/级联式编程

java链式编程/级联式编程