自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 收藏
  • 关注

原创 Spring Security

本文是Spring Security 自学笔记最后贴出我Spring Security 的完整配置httphttphttphttphttp.cors()http.logout()上面的配置中有的一点需要说明的是我没有定义登录和退出站点,所以登录请求过来之后先被 LoginAuthenticationFilter 拦截完成认证后会返回 jwt token 给前端,前端在请求头带过来,然后被 TokenAuthenticationFilter 拦截获取请求头携带的 token。

2024-01-10 14:58:19 898 1

原创 设计模式-建造者模式

建造者模式是一种对象创建型模式,它将一个复杂对象的创建过程分离,一步一步创建一个复杂对象。

2023-04-18 11:14:06 76

原创 设计模式-策略模式

策略模式定义了一组算法,将每个算法都封装起来,并且使它们之间可以互换。策略模式就是用来封装算法的,在实践中,只要在分析过程中发现需要在不同场合应用不同业务规则,就可以考虑使用策略模式。

2023-04-18 11:11:54 101

原创 设计模式-外观模式

一种结构型设计模式,为复杂的子系统调用提供一个统一的入口,降低子系统与客户端的耦合度如果完成一个功能需要通过引用一系列业务类来完成,并且这些类经常作为一个整体出现,这时如果有一个入口类来统筹这些类,客户端只需要引用这个入口类就可以实现功能,这就是外观模式。比如在 mvc 架构的工程中。

2023-04-18 10:58:40 85

原创 设计模式-装饰器模式

装饰器模式是一种对象结构型模式,它可以在不改变对象本身功能的前提下为对象增加额外新行为,装饰器模式是一种用来替代继承的技术,使用对象之间的组合关系取代类之间的继承关系。

2023-04-18 10:56:49 61

原创 设计模式-命令模式

新房装修的最后几道工序之一是安装开关,通过开关可以控制一些电器的开闭,比如电灯。开关和电器没有直接的关联关系,而是通过电线相连。也就是说一个开关可能通过不同的电线控制不同电器。在设计模式中,可以将这种结构理解成命令模式,将开关视为请求发送者,电器是请求接受者,电线则是命令对象。为了降低耦合度将发送者和接受者解耦,在发送者和接受者之间引入命令对象,将发送者请求封装在命令对象中,在通过命令对象调接受者方法。命令模式是一种对象行为模式,别名为动作模式或事务模式。

2023-04-18 10:53:10 54

原创 设计模式-状态模式

状态模式用于解决系统中复杂对象的状态转换以及不同状态行为封装的问题。当某个对象存在多种状态,这些状态之间可以进行切换,而且对象在不同状态下将有不同行为。就可以使用状态模式。状态模式是一种对象行为型模式。

2023-04-18 10:46:11 198 1

原创 Shrio 权限管理

Shrio 权限管理原理及使用过程中遇到的一些问题

2023-04-17 11:10:45 182

原创 Java 泛型方法

关于Java中的泛型接口和泛型方法这里不做赘述,主要说下泛型方法。泛型类,是在实例化类的时候指明泛型的具体类型;泛型方法,是在调用方法的时候指明泛型的具体类型 。、下面是一个泛型方法的基本格式:// <T>表明该方法是一个泛型方法,此时才可以在方法中使用泛型类型Tpublic <T> T getObject(Class<T> tClass)throws InstantiationException , IllegalAccessException{

2021-09-08 17:41:10 4834

原创 Mybatis Mapper接口方法参数处理

简介这篇文档记录 mybatis 的DAO层接口参数以及方法返回值的处理,方便有需要的时候查找正文我们知道在 mybatis 定义一个接口参数可以加 @Param 注解,也可以不加,如果加了注解 sql 里取值就用注解的值,如果不加就默认用参数名称,比如下面的方法定义:public interface UserMapper { @Select("select * from user where id = #{id}") User find(Long id); @Selec

2021-08-13 17:37:56 579

原创 线程池 ThreadPoolExecutor

前言网上关于线程池详解的文章很多,陆续也看了不少,从刚开始的怎么使用到原理解析,但是一直想自己写一篇,记录一下自己的学习历程,之前看源码一直是一知半解,不得要领,最近静下心来仔细看,发现以前看不懂的地方豁然贯通了,果然是书读百遍,其中最大的帮助来源于代码本身的注释,废话不多说,开始正文。正文关于线程池的使用不是这篇文章的主要目的,这里主要是记录下自己对源码的理解。其实了解一个类最基本的手段是通过他的注释,奈何以前一看见大段纯英文就头疼,这次静下来发现竟然能大概看懂,这里先贴上比较重要的注释* &l

2021-07-29 16:24:54 235

原创 SpringMVC 拦截器

SpringMVC 拦截器上篇笔记了记录了 SpringBoot 如何注入Servlet 三大组件,其中包括 Filter 的使用:SpringBoot 注册Servlet,Filter,Listener 这篇笔记要说的拦截器和 Filter 的作用其实差不多。首先来说用法,要实现一个拦截器需要以下几步:1、编写一个类实现 HandlerInterceptor 接口public class MyInterceptor implements HandlerInterceptor {

2021-03-01 00:31:53 146 1

原创 SpringBoot 注册Servlet,Filter,Listener

SpringBoot 注册Servlet,Filter,Listener我们现在使用工程大多是SpringBoot应用, 默认是以jar包的方式运行,使用嵌入式的Tomcat容器,而以前我们使用的Spring Web应用是以war包的方式,放在外部的Tomcat或者WebLogic容器中运行,如果是web应用,工程的src下会有一个webapp/WEB-INF/web.xml文件,我们可以把三大组件都注册在web.xml文件中,而 SpringBoot 工程没有 web.xml 文件怎么注册三大组件呢?S

2021-02-28 17:44:22 125

原创 Spring WEB请求的参数处理与基本注解

Spring WEB请求的参数处理与基本注解注解:• @PathVariable 获取请求路径参数// 使用变量定义请求路径中的值,必须是GET请求@GetMapping("/car/{id}/{username}")public Map<String, Object> car(@PathVariable("id") String id, @PathVariable("username") String username,

2021-02-27 20:42:50 465

原创 SpringBoot Rest请求映射

SpringBoot Rest请求映射当调用http请求时,可以基于Rest风格发送请求,比如在Controller里添加如下风格的接口:@RequestMapping(value = "/user", method = RequestMethod.GET)@GetMapping("/user") // 二选一public String get(){ return "GET请求";}@RequestMapping(value = "/user", method = RequestMeth

2021-02-26 18:59:29 230

原创 Class.forName和ClassUtils.forName

Class<?> Class.forName(“name”)public static Class<?> forName(String className) throws ClassNotFoundException { Class<?> caller = Reflection.getCallerClass(); return forName0(className, true, ClassLoader.getClassLoader(caller), ca

2021-02-10 14:37:51 748

原创 Spring框架的ApplicationListener事件监听机制

Spring框架的ApplicationListener事件监听机制spring中的事件监听机制依托于ApplicationEvent 事件类和ApplicationListener 接口,对于实现了ApplicationListener 接口的子类并且注入到容器中,每当有ApplicationEvent 事件被发布到springContext中,Listener都会被通知,从本质上来讲,这是一个观察者模式的实现。下面我们以一个自定义例子跟踪下事件监听机制的原理。首先自定一个一个Listener实现A

2021-01-22 14:19:30 335

原创 自定义注解的使用

今日份小计关于注解的使用当然是老生常谈的话题了,关于元注解以及标注注解的博客网上很多,自定义注解的使用大致分为三个步骤1、首先自定义一个注解@Documented@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.METHOD)public @interface Person { String name() default "";}自定义注解的返回值类型代表注解的参数类型,方法名代表参数名称。2、元注解@Targer标记注

2021-01-13 20:22:25 3071

原创 Spring框架的ImportSelector使用场景

Spring框架的ImportSelector使用场景说起ImportSelector接口,不得不说@Import注解,该注解的作用是给容器中导入一个或多个组件,看下注释public @interface Import { /** * {@link Configuration @Configuration}, {@link ImportSelector}, * {@link ImportBeanDefinitionRegistrar}, or regular componen

2021-01-05 15:52:49 846 1

原创 深入理解java虚拟机(三)类加载机制

虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转化解析和初始化,最终形成可以被虚拟机直接使用的Java类型,就是虚拟机的类加载机制。类的加载时机类从加载到虚拟机内存开,始到卸载出内存为止,它的整个生命周期包括,加载、验证、准备、解析、初始化、使用、卸载7个阶段。其中验证、准备、解析三个部分统称连接。什么情况下需要开始加载类过程的第一个阶段,虚拟机没有强制约束,但对于初始化阶段,虚拟机规范严格规定有且只有5种情况必须立即对类进行 “初始化”。而加载等自然在此前进行。1、遇到new。

2020-08-27 23:00:51 110

原创 深入理解java虚拟机(二)内存溢出

前一篇文章简单介绍了java虚拟机的内存管理,包括运行时划分的区域以及每个区域的主要作用,java内存溢出是建立在内存管理的基础之上的。下面总结下每一个区域的内存溢出异常。堆溢出堆用来存储对象,只要不断创建对象,并保证这些对象不被GC回收,那么在对象数量到达堆最大容量就会内存溢出。堆OOM异常是一种常见的异常,在OutOfMemoryError之后会进一步提示 Java heap space。解决这个异常一般是先通过分析工具分析是否有对象非必要但是无法回收,也就是先确定是内存泄漏还是内存溢出。如果是内

2020-07-21 21:49:04 87

原创 深入理解java虚拟机(一)java内存管理

这张图描述了Java程序运行时划分的几个区域,有的在虚拟机启动即存在,有的依赖用户线程的启动建立和销毁。程序计数器可以看成当前线程执行字节码的行号指示器,字节码解释器通过改变这个计数器来选取下一条需要执行的字节码指令,分支,循环,跳转等。由于多线程是通过线程轮流切换并分配处理器执行时间的方式实现的,同一时刻一个内核只执行一个线程的指令,为了线程切换后能回复到正确的位置,每条线程都有一个独立的程序计数器,保证互不影响。此区域是jvm规范中没有规定任何OutOfMemoryError的区域。虚拟机栈j.

2020-07-21 21:02:29 73

原创 Spring AOP的使用

Spring提供了4种类型的AOP支持:基于代理的经典Spring AOP;纯POJO切面;@AspectJ注解驱动的切面;注入式AspectJ切面(适用于Spring各版本)Spring AOP建立在动态代理的基础之上,所以仅支持方法拦截。在运行期把切面织入到spring管理的bean中,切面相当于一个代理类,拦截被通知方法的调用,并转发调用给真正的目标对象,在目标方法被调用之前,织入横切逻辑。代理类的作用有点类似...

2020-07-19 01:33:58 116

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除