首先说结论,使用@ControllerAdvice配合@ExceptionHandler处理全局controller的异常时,如果想要正确匹配自己的自定义异常,需要在controller的方法上抛出相应的自定义异常,或者自定义异常继承RuntimeException类。问题描述:1、在使用@ControllerAdvice配合@ExceptionHandler处理全局异常时,自定义了一个AppException(extendsException),由于有些全局的参数需要统一验证,所以在所有controller的方法上加一层AOP校验,如果...
继续阅读 >
分类:spring
2021
09-04
09-04
使用spring aop统一处理异常和打印日志方式
我们很容易写出的代码我们很容易写出带有很多trycatch和logger.warn(),logger.error()的代码,这样一个方法本来的业务逻辑只有5行,有了这些,代码就变成了10行或者更多行,如:publicResultDTO<UserDTO>queryUserByCardId(StringcardId){ResultDTO<UserDTO>result=newResultDTO<UserDTO>();StringBuilderlog=newStringBuilder();log.append("queryUserByCardId:"+cardId);try{...
继续阅读 >
2021
09-04
09-04
Spring Boot+Shiro实现一个Http请求的Basic认证
目录前言实践部分测试部分总结前言今天跟小伙伴们分享一个实战内容,使用SpringBoot+Shiro实现一个简单的Http认证。场景是这样的,我们平时的工作中可能会对外提供一些接口,如果这些接口不做一些安全认证,什么人都可以访问,安全性就太低了,所以我们的目的就是增加一个接口的认证机制,防止别人通过接口攻击服务器。至于Shiro是什么,Http的Basic认证是什么,王子就简单介绍一下,详细内容请自行了解。Shiro是一个Java的安全框...
继续阅读 >
2021
09-04
09-04
Aspectj与Spring AOP的对比分析
1、简介今天有多个可用的AOP库,它们需要能够回答许多问题:1、是否与用户现有的或新的应用程序兼容?2、在哪里可以实现AOP?3、与自己的应用程序集成多快?4、性能开销是多少?在本文中,我们将研究如何回答这些问题,并介绍Springaop和AspectJ,这是Java的两个最受欢迎的aop框架。2、AOP概念在开始之前,让我们对术语和核心概念进行快速、高层次的审查:Aspect——一种标准代码/功能,分散在应用程序中的多个位置,...
继续阅读 >
2021
09-04
09-04
Spring使用AspectJ的注解式实现AOP面向切面编程
目录1、认识SpringAOP1.1AOP的简介1.2AOP中的概念切入点(pointcut):2、认识AspectJ2.1AspectJ的简介2.2SpringAOP和AspectJ比较2.3Spring支持AspectJ的注解式切面编程2.4AspectJ的注解说明3、Spring使用AspectJ实现日志记录操作(1)添加相关的jar包(2)编写拦截规则的注解(3)编写使用注解的被拦截类(4)编写使用方法规则的被拦截类(5)编写切面(6)配置类(7)运行4、SpringBoot使用AspectJ实现日志记录操作...
继续阅读 >
2021
09-04
09-04
spring中@Reference注入为空的解决方法
线上发生事故了前天晚上上线一波,发生了一个挺有意思的事,昨天复盘了一下,今天分享一下。晚上的时候,我负责的系统和收银系统同时上线一波(用的是Dubbo)。然后很神奇的事情发生了,收银系统用@Reference注解注入我的接口,然后这个接口的实现类居然为空。其实我们当时没排查出来是什么原因?重启了一下就好了,毕竟重启大法好。但本着不能给用户充钱的路上造成阻碍,还是要排查一波这个代理对象为空是如何造成的。线上dubbo...
继续阅读 >
1、@Value注解简介Spring框架提供的@Value注解可以将外部的值动态注入到Bean中,@Value注解使用在字段、构造器参数和方法参数上。@Value可以指定属性取值的表达式,支持通过#{}使用SpringEL来取值,也支持使用${}来将属性来源中(Properties文件、本地环境变量、系统属性等)的值注入到Bean的属性中。此注解值的注入发生在AutowiredAnnotationBeanPostProcessor类中。@Value注解实现以下几种情况:(1)注入普通字符;(2)注入操...
继续阅读 >
2021
08-31
08-31
Spring Cache和EhCache实现缓存管理方式
目录1、认识SpringCache2、认识EhCache3、创建SpringBoot与MyBatis的整合项目3.1创建数据表3.2创建项目4、配置EhCache缓存管理器4.1创建ehcache.xml配置文件4.2配置缓存管理器4.3开启缓存功能5、使用EhCache实现缓存管理5.1创建实体类(Entity层)5.2数据库映射层(Mapper层)5.3业务逻辑层(Service层)5.4控制器方法(Controller层)5.5显示页面(View层)1、认识SpringCacheSpringCache是Spring提供的一整套...
继续阅读 >
2021
08-31
08-31
Spring Data JPA使用JPQL与原生SQL进行查询的操作
1、使用JPQL语句进行查询JPQL语言(JavaPersistenceQueryLanguage)是一种和SQL非常类似的中间性和对象化查询语言,它最终会被编译成针对不同底层数据库的SQL语言,从而屏蔽不同数据库的差异。JPQL语言通过Query接口封装执行,Query接口封装了执行数据库查询的相关方法。调用EntityManager的Query、NamedQuery及NativeQuery方法可以获得查询对象,进而可调用Query接口的相关方法来执行查询操作。JPQL是面向对象进行查询...
继续阅读 >
2021
08-31
08-31
Spring Bean的实例化之属性注入源码剖析过程
前言这一章节我们来讨论创建Bean过程中的属性注入,在Spring的IOC容器启动过程中,会把定义的Bean封装成BeanDefinition注册到一个ConcurrentHashMap中,Bean注册完成后,就会对单利的且lazy-init=false的Bean进行实例化。创建Bean的代码在AbstractAutowireCapableBeanFactory#doCreateBean中,当Bean创建成功之后,会调用AbstractAutowireCapableBeanFactory#populateBean方法进行属性注入。本篇文章主要就是分析该方法是如何...
继续阅读 >
2021
08-31
08-31
深入理解Spring Aop的执行顺序
首先回忆一下AOP的常用注解@Before:前置通知:目标方法之前执行@After:后置通知:目标方法之后执行@AfterReturning:返回后通知:执行方法结束前执行@AfterThrowing:异常通知:出现异常时执行@Around:环绕通知:环绕目标方法执行Spring4中aop正常顺序+异常顺序try{@Beforemethod.invoke(obj,args);@AfterReturning}catch(){@AfterThrowing}finally{@After}正常执行:@Before(前...
继续阅读 >
2021
08-26
08-26
源码解读Spring-Integration执行过程
一,前言Spring-Integration基于Spring,在应用程序中启用了轻量级消息传递,并支持通过声明式适配器与外部系统集成。这一段官网的介绍,概况了整个Integration的用途。个人感觉消息传递是真正的重点。如上图所示,典型的生产者-消费者模式,中间通过一个特定的通道进行数据传输,说到这,是不是隐隐感觉到queue的存在。确实事实上这个所谓的通道默认就是用的blockingqueue。Spring-Integration网上的资料是真少,再加上源码分析...
继续阅读 >
2021
08-26
08-26
解析Spring中的静态代理和动态代理
目录一、静态代理1.1、静态代理的使用1.2、与装饰者模式的区别二、动态代理2.1、JDK动态代理2.2、CGlib动态代理实现一、静态代理1.1、静态代理的使用静态代理,代理类和被代理的类实现了同样的接口,代理类同时持有被代理类的引用,这样,当我们需要调用被代理类的方法时,可以通过调用代理类的方法来做到。举例如下:假设领导的工作是开会和给员工考评。先定义一个接口:packagecom.sharpcj;publicinterfaceIWork{void...
继续阅读 >
2021
08-26
08-26
解析Spring中面向切面编程
目录一、AOP——另一种编程思想1.1、什么是AOP1.2、为什么需要AOP1.3、AOP实现分类二、AOP术语三、初步认识SpringAOP3.1、SpringAOP的特点3.2、SpringAOP的简单例子四、通过注解配置SpringAOP4.1、通过注解声明切点指示器4.2、通过注解声明5种通知类型4.3、通过注解声明切点表达式4.4、通过注解处理通知中的参数4.5、通过注解配置织入的方式五、通过XML配置文件声明切面5.1、XML配置文件中切点指示器5.2、XML文...
继续阅读 >
2021
08-25
08-25
Spring Data JPA中 in 条件参数的传递方式
关于SpringDataJPA中自定义sql条件的in参数记录此文做一个记录,以便以后观看,也希望正在遇到同样问题的同学能有所启发,如果你有更好的方法,或我的做法有问题,请告知下,非常感谢。下面写两种简单做法,注意下地方:在此我只记录HQL中in后面参数问题,细节查询方法相关代码就略过,还请见谅查询接口:/****paramString:自定义hql**paramMap:hql中查询条件的参数**start:数据开始条数**max:最大数据条数**/pu...
继续阅读 >
2021
08-25
08-25
Spring Security 密码验证动态加盐的验证处理方法
本文个人博客地址:https://www.leafage.top/posts/detail/21697I2R最近几天在改造项目,需要将gateway整合security在一起进行认证和鉴权,之前gateway和auth是两个服务,auth是shiro写的一个,一个filter和一个配置,内容很简单,生成token,验证token,没有其他的安全检查,然后让对项目进行重构。先是要整合gateway和shiro,然而因为gateway是webflux,而shiro-spring是webmvc,所以没搞成功,如果有做过并成功的,请告诉我如何...
继续阅读 >