切面

花了近十年的时间,整理出史上最全面Java面试题

痞子三分冷 提交于 2019-11-28 18:09:38
1、什么是Spring? Spring是一个开源的Java EE开发框架。Spring框架的核心功能可以应用在任何Java应用程序中,但对Java EE平台上的Web应用程序有更好的扩展性。Spring框架的目标是使得Java EE应用程序的开发更加简捷,通过使用POJO为基础的编程模型促进良好的编程风格。 2、Spring有哪些优点? 轻量级:Spring在大小和透明性方面绝对属于轻量级的,基础版本的Spring框架大约只有2MB。 控制反转(IOC):Spring使用控制反转技术实现了松耦合。依赖被注入到对象,而不是创建或寻找依赖对象。 面向切面编程(AOP): Spring支持面向切面编程,同时把应用的业务逻辑与系统的服务分离开来。 容器:Spring包含并管理应用程序对象的配置及生命周期。 MVC框架:Spring的web框架是一个设计优良的web MVC框架,很好的取代了一些web框架。 事务管理:Spring对下至本地业务上至全局业务(JAT)提供了统一的事务管理接口。 异常处理:Spring提供一个方便的API将特定技术的异常(由JDBC, Hibernate, 或JDO抛出)转化为一致的、Unchecked异常。 3、Spring 事务实现方式 编程式事务管理:这意味着你可以通过编程的方式管理事务,这种方式带来了很大的灵活性,但很难维护。 声明式事务管理

SpringBoot使用AOP

ぃ、小莉子 提交于 2019-11-28 12:45:54
本文介绍SpringBoot中使用Spring AOP。 简介 AOP简介 AOP可能对于广大开发者耳熟能详,它是Aspect Oriented Programming的缩写,翻译成中文就是:面向切面编程。这个可能是面试中经常提到的问题,同时它也是Spring框架中一个重大的特性,AOP主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果,对于我们开发中最常见的可能就是日志记录,事务处理,异常处理等等。 SpringBoot中使用AOP 接下来介绍SpringBoot项目中如何运用AOP。 新建项目 新建一个SpringBoot项目,在pom文件中加入AOP依赖,完整代码如下: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0<

Spring AOP入门

爷,独闯天下 提交于 2019-11-28 12:44:29
原文: http://blog.gqylpy.com/gqy/453 置顶:来自一名75后老程序员的武林秘籍——必读 (博主推荐) 来,先呈上武林秘籍链接: http://blog.gqylpy.com/gqy/401/ 你好,我是一名极客!一个 75 后的老工程师! 我将花两分钟,表述清楚我让你读这段文字的目的! 如果你看过武侠小说,你可以把这个经历理解为,你失足落入一个山洞遇到了一位垂暮的老者!而这位老者打算传你一套武功秘籍! 没错,我就是这个老者! 干研发 20 多年了!我也年轻过,奋斗过!我会画原理图,会画 PCB,会模拟,会数字!玩过 PLC,玩过单片机,会用汇编,会用 C!玩过 ARM,比如 PLC,STM32,和时下正在起飞的 NXP RT1052!搞过 DSP,比如 TMS320F28335!搞过 FPGA,不管 Xilinx 还是 Altera,也不管是 Verilog 还是 VHDL,或者直接画数字电路图!我懂嵌入式系统,比如 uCOS 和 Linux!我懂开源的硬件,比如 Arduino 和树莓派!我也搞软件,学了一堆上位机的语言C#,JAVA,Python,Kotlin,Swift!会写爬虫工具,又自学写APP,不管Android 还是 IOS! 可是这一切有什么用呢?土鸡瓦狗!不值一提!干技术的永远就是最苦逼的那个人! 我相信看到这里的你,应该是个 IT

AOP面向切面编程

早过忘川 提交于 2019-11-28 09:42:45
1.横切性的关注点(Cross Cutting Concern):是一种独立的服务,它会遍布系统的处理流程之中。 2.方面(Aspect):对横切性关注点的模块化。 来源: https://www.cnblogs.com/fzdsy/p/11403515.html

Spring学习之旅(一)--初始Spring

让人想犯罪 __ 提交于 2019-11-28 07:52:14
之前从博客、视频断断续续的学到了 Spring 的相关知识,但是都是一个个碎片化的知识。刚好最近在读 《Sprign实战(第四版)》,所以借此机会重新整理下Spring 系列的内容。 Spring 是什么? Spring 是一个开源框架,它由 Rod Johnson 创建。它是为了解决企业应用开发的复杂性而创建的。 Spring 使用基本的 JavaBean 来完成以前只可能由 EJB 完成的事情。然而, Spring 的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何 Java 应用都可以从 Spring 中受益。 Spring 最根本的使命就是 简化Java开发 。为了完成这个使命, Spring 采用了如下几种策略: 基于 POJO 的轻量级和最小侵入性编程 通过依赖注入和面向接口实现松耦合 基于切面和惯例进行声明式编程 通过切面和模板减少样板式代码 下面我们来详细讲解下这几种策略。 基于 POJO 的轻量级和最小侵入性编程 很多框架通过强迫应用继承它们的类或实现接口的形式来达到使用功能的目的,这样的方案导致了应用和框架之间的强耦合,如果更换框架的话将花费更多的成本。 而 Spring 竭力避免这种情况的发现,它不会强迫你必须继承 Spring 规范的类或实现其接口,而且你也看不出来使用 Spring 框架的痕迹。最坏的场景也只是类上面多了一些

手动实现SPring中的AOP(2)

情到浓时终转凉″ 提交于 2019-11-27 20:46:17
相关名词的解释:通知定义了要织入目标对象的逻辑,以及执行时机。Spring 中对应了 5 种不同类型的通知:· 前置通知(Before):在目标方法执行前,执行通知· 后置通知(After):在目标方法执行后,执行通知,此时不关系目标方法返回的结果是什么· 返回通知(After-returning):在目标方法执行后,执行通知· 异常通知(After-throwing):在目标方法抛出异常后执行通知· 环绕通知(Around): 目标方法被通知包裹,通知在目标方法执行前和执行后都被会调用 切点(Pointcut): 如果说通知定义了在何时执行通知,那么切点就定义了在何处执行通知。所以切点的作用就是 通过匹配规则查找合适的连接点( Joinpoint),AOP 会在这些连接点上织入通知。 切面(Aspect): 切面包含了通知和切点,通知和切点共同定义了切面是什么,在何时,何处执行切面逻辑。 实现步骤: 定义一个包含切面逻辑的对象,这里假设叫 logMethodInvocation 定义一个 Advice 对象(实现了 InvocationHandler 接口),并将上面的 logMethodInvocation 和 目标对象传入 将上面的 Adivce 对象和目标对象传给 JDK 动态代理方法,为目标对象生成代理 MethodInvocation 接口 // 实现类包含了切面逻辑

springAOP-xml中声明切面

倾然丶 夕夏残阳落幕 提交于 2019-11-27 16:21:11
1 spring的aop命名空间中,提供了多个元素用来在XML中声明切面,如下所示: ==================================================================================================== aop配置元素 用途 <aop:advisor> 定义AOP通知器 <aop:after> 定义AOP后置通知(不管被通知的方法是否执行成功) <aop:after-returning> 定义aop返回通知 <aop:after-throwing> 定义aop异常通知 <aop:around> 定义aop环绕通知 <aop:aspect> 定义一个切面 <aop:aspectj-autoproxy> 启用@Aspect注解驱动的切面 <aop:before> 定义一个AOP前置通知 <aop:config> 顶层的AOP配置元素.大多数的<aop:*>元素必须包含在<aop:config>元素内. <aop:declare-parents> 以透明的方式为被通知的对象引入额外的接口 <aop:pointcut> 定义一个切点 ========================================================================================

java_切面日志

坚强是说给别人听的谎言 提交于 2019-11-27 14:11:47
切面日志举例 package com.keyba1; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * * @author KeyBa * @date 2019/6/13 * 记录日志 */ @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface Log { String value() default ""; } package com.keyba1; import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org

AOP+日志打印

爷,独闯天下 提交于 2019-11-27 12:48:21
AOP+日志打印 例:我这个是捕捉error异常的打印 注释: Proceedingjoinpoint 继承了 JoinPoint 。是在JoinPoint的基础上暴露出 proceed 这个方法。proceed很重要,这个是aop代理链执行的方法。Proceedingjoinpoint 就能支持 aop:around 这种切面(而其他的几种切面只需要用到JoinPoint,这跟切面类型有关) 注释: 用到哪个切入点就写哪个 不需要全都写; @Aspect @Component public class aopMonitor(){ //参数作用(使用指定类初始化日志对象,在日志输出的时候,可以打印出日志信息所在类) //如:Logger logger = LoggerFactory.getLogger(com.Book.class); //logger.debug("日志信息"); //将会打印出: com.Book : 日志信息 private static final Logger logger = LoggerFactory.getLogger(JavaMonitor.class); //CONTROLLER_POINT要写到切点注解的参数中 //execution(): 表达式主体。 //第一个*号:表示返回类型,*号表示所有的类型。 //包名:表示需要拦截的包名