
Java后端
二饭
公众号:全栈开发日记
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
SpringBoot 的@Repository 等注解的底层实现原理
*懒加载方式:**上文提到的懒加载时会在getBean时创建实例外的情况,这里不多描述。注解一个类时, Spring 内部使用一个三层缓存机制来管理Bean的生命周期,核心是在。等注解的类,加载IOC容器基本步骤,当 Spring Boot 应用启动时,默认情况下注册到IOC容器中的实例是单例,能保证每次获取到的是同一个实例。Spring 会读取每个使用了这些注解类的元数据,创建对应的。注解扫描注册到IOC容器时,默认的接口。获取托管的Bean实例,该方法由接口。的Bean,就根据对应的。原创 2025-07-29 22:04:22 · 395 阅读 · 0 评论 -
【Java进阶】大白话详解Java内存模型,纯手撸
年轻代和老年代是堆内存的主要区域,每一个新建对象都会先进入年轻代中的Eden 区,当Eden 区满时会触发Minor GC,GC过后Eden 区幸存下来以及非空闲幸存者区的对象会通过复制算法复制到空闲的幸存者区(S0和S1始终会保持其中一个为空),复制完成后Eden区和原非空闲幸存者区对象会被清空。运行时常量池中存储的是字符串常量池的引用,可以理解为你把文件存到了D盘,但给这个文件创建了一个快捷方式,把快捷方式存在C盘,这样你就可以直接在C盘快速的访问D盘中的文件了。原创 2025-06-17 17:53:02 · 909 阅读 · 0 评论 -
Java的动态加载及类加载器实践
Java中的动态类加载允许程序在运行时动态编译和加载代码,突破了传统静态编译的限制。其主要应用场景包括插件系统、规则引擎和热部署等。实现动态类加载的核心原理包括动态编译、字节码内存管理、类加载以及利用反射调用。动态编译通过JavaCompiler将字符串形式的类代码编译为字节码,字节码通过内存流管理,最后由自定义的类加载器加载到JVM中。此外,还可以通过远程加载JAR文件到JVM,使用URLClassLoader直接加载远程JAR,JVM会按需下载类文件。需要注意的是,不同类加载器加载的类不能相互转换,类的原创 2025-05-23 17:57:43 · 463 阅读 · 0 评论 -
JDK中的脚本引擎ScriptEngine并发测试
JDK中的脚本引擎ScriptEngine并发测试原创 2022-10-13 15:25:53 · 847 阅读 · 0 评论 -
Java基础-Java8新特性Lambda表达式
本篇目录1、Lambda表达式是什么2、Lambda表达式的语法3、Lambda表达式的特点4、Lambda表达式的简单使用5、为什么使用Lambda表达式6、方法引用7、函数式接口1、Lambda表达式是什么?Lambda表达式是Java8中添加的一个新特性,允许把函数作为一个方法的参数,称为“函数式编程”。举个例子List<Integer> list=new ArrayList<>();list.forEach(item->{ Syste原创 2022-01-06 14:04:32 · 574 阅读 · 0 评论 -
Java基础-可变长参数
本篇目录1、什么是可变长参数2、可变长参数的定义3、可变长参数的使用4、遍历可变长参数1、什么是可变长参数可变长参数顾名思义是可以改变长度的参数,意为传入的参数个数可以不固定。Java中什么数据类型可以改变长度?当然是数组。确实,在JDK5之前的确是使用数组来实现可变长参数的。那么什么是可变长参数?如下代码:public static void test(String[] args){ for(String str:args){ System.out.print原创 2022-01-02 15:12:12 · 6793 阅读 · 1 评论 -
Java基础 - 泛型
本文都是干货,一些理论上东西我尽可能一笔带过,只写有用的内容。本篇目录1- 泛型是什么2- 泛型的作用3- 泛型的定义4- 泛型的使用泛型是什么如下代码是一个使用了泛型的实体类,E表示这里类型使用的了泛型,意思是可以为任意类型,也包括引用数据类型。public class Test<E> { private E test; public Test(E test){ this.test=test; } public E ge原创 2021-12-29 15:32:50 · 357 阅读 · 0 评论 -
Java基础-Java中的反射机制
本篇目录1- 反射是什么?2- 获取类对象的三种方式3- 通过类对象获取该类的所有方法并调用4- 通过类对象调用指定私有方法5- 通过类对象获取所有属性并输出6- 通过类对象获取指定属性并修改属性的值7- 通过类对象获取指定构造方法并调用反射是什么?反射机制是Java中的一个高级特性,通过反射机制,我们可以操作任意一个类,包括获取这个类的所有属性和方法,包括私有属性和构造方法。在我们日常开发中其实也经常接触到反射,比如我们经常使用的IDEA,当我们调用一个方法时,会动态的获取该方法的原创 2021-12-24 12:08:40 · 615 阅读 · 0 评论 -
Log4j-2远程代码执行漏洞解决方案
漏洞简述、解决方案、推荐建议原创 2021-12-11 18:51:30 · 2552 阅读 · 0 评论 -
SpringBoot后端配置允许自定义header
前言:前后端分离项目,前端传入自定义的header参数对服务器发起请求,但显示跨域错误解决:创建一个拦截器,在拦截器中编辑允许的自定义header,例子如下:public class AdminInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handl原创 2021-08-26 20:47:10 · 4397 阅读 · 0 评论 -
Java项目生成二维码
Java生成二维码的方式有很多,这里基于谷歌的zxing做演示。使用zxing的好处在于方便,zxing的jar包可在Maven中央仓库找到并依赖到本地。而像QRCode并不能直接依赖到本地,需要自行下载jar包然后安装到本地Maven仓库,相对多了一道程序。下面是使用zxing的项目流程:1-POM依赖<!-- 谷歌二维码生成--><dependency> <groupId>com.google.zxing</groupId> &原创 2021-07-27 12:46:35 · 371 阅读 · 0 评论 -
SpringBoot项目设置多线程异步定时任务
创建SpringBoot项目就不说了。如下是我的案例:@Component // IOC容器@EnableScheduling // 1.开启定时任务@EnableAsync // 2.开启多线程@Slf4j // 日志public class MultithreadScheduleTask { @Value("${blog.QRCodeFile}") String qrCodePath; /**转载 2021-07-26 14:32:52 · 255 阅读 · 0 评论 -
SpringBoot配置拦截器,指定拦截或放行的请求路径
配置类:@Configurationpublic class AppConfig implements WebMvcConfigurer { @Bean public MyInterceptor myInterceptor() { return new MyInterceptor(); } /** * 注册自定义拦截器 * 指定要拦截的路径 * /api/blog/** 拦截请求前缀为api/blog的请求,其他请求放行原创 2021-07-21 10:44:35 · 12316 阅读 · 0 评论 -
SpringBoot-Vue项目整合WebSocket
SpringBoot-Vue项目整合WebSocket首发在公众号【全栈开发日记】介绍WebSocket是一种网络通信协议。和HTTP协议一样,都是基于TCP协议来传输数据。为什么需要WebSocket?因为有一些功能HTTP无法满足。HTTP协议是一种无状态的、无连接的、单项的应用层协议。基于HTTP协议的通信请求只能由客户端发起,服务端对请求做出处理。这种通信模型有一个弊端,它无法实现服务器主动向客户端发起请求。以微信举例,张三给李四发了一条消息,这条消息来到了服务器后无法给李四的客户端原创 2021-07-14 16:20:37 · 5193 阅读 · 0 评论 -
通过Nginx代理后获取真实IP地址
通过Nginx代理后,后端获取的IP地址变成了Nginx的IP。解决方法:1、配置Nginx配置文件 location /apis { rewrite ^.+apis/?(.*)$ /$1 break; include uwsgi_params; proxy_pass http://localhost:88; proxy_set_header X-real-ip $remote_addr; # 关键 }2、Jav原创 2021-07-06 18:35:09 · 1329 阅读 · 1 评论 -
The WebSocket session [5] has been closed and no method (apart from close())
使用WebSocket协议服务端主动向客户端发送消息时,该Session对象关闭了才会出现该异常。可使用session.isOpen()方法判断该连接是否打开,再进行推送消息。if(wsController.session.isOpen()){ wsController.session.getBasicRemote().sendText(message);}...原创 2021-07-06 14:53:17 · 2063 阅读 · 0 评论 -
宿主机连接docker中的镜像,boot项目提示连接不到mysql
宿主机(安装docker的系统)连接docker中的镜像如:连接docker中的mysql,boot项目提示连接不到mysql。① 进入该镜像docker exec -it 镜像名称(NAMES) bash ② 查看镜像IPifconfig如提示没有该命令,执行如下命令安装:apt-get updateapt install net-tools # ifconfigiputils-ping # ping其中:eth0就是该docker的内网IP,宿主机可通过该IP连接到原创 2021-06-05 15:23:29 · 330 阅读 · 0 评论 -
解决post请求中文乱码
如果设置过滤器和tomcat的参数还是无法解决,那么就需要我们手动来转了。如下String nickname=null;try { nickname = new String(nickname.getBytes("iso-8859-1"),"utf-8");} catch (UnsupportedEncodingException e) { e.printStackTrace();}最后输出nickname就可以看到转过来了。...原创 2021-03-28 16:00:00 · 308 阅读 · 0 评论 -
Spring整合Kaptcha谷歌验证码工具
开发步骤:1、加入依赖<dependency> <groupId>com.google.code.kaptcha</groupId> <artifactId>kaptcha</artifactId> <version>2.3</version></dependency>国内镜像无法下载该依赖,需要手动通过jar包在本地仓库安装一个依赖。安装命令:mvn install:ins原创 2021-01-07 14:06:35 · 333 阅读 · 0 评论 -
Git使用教程
安装Git(Windows):https://git-scm.com/download/win出现以下内容证明git安装成功。创建仓库:https://gitee.com/点击加号创建一个云仓库。使用命令行全局设置:git config --global user.name "用户名称"git config --global user.email "邮箱"在本地创建Git仓库:① 进入一个已经创建好的项目文件夹cd 文件夹名称② 将该项目初始化(需要在该文件夹中)gi原创 2020-12-22 18:54:27 · 189 阅读 · 0 评论 -
多线程-CAS
什么是CAS?CAS全称:Compare-And-Swap(比较 and 替换)在日常开发中基本不会直接使用CAS操作,因为这个操作比较复杂,我们一般通过一些JDK封装好的并发工具类,这些类在java.util.concurrent包下,这个包下的工具类很多都用到了CAS操作。以上就是CAS执行流程,当该线程开始后会先读取要修改的值E的当前值,然后再去执行操作(如自增、自减等),当执行完操作后再去判断当前E值和之前读取到的预期值A是否相同,如果不相同则再次获取当前值E继续以上流程,直到当前值与预期值原创 2020-12-03 22:05:48 · 212 阅读 · 1 评论 -
ArrayList集合深度解析及其使用优化
ArrayList集合(以下均使用jdk1.8)ArrayList集合底层数组的创建和扩容机制:① 通过源码中查看到elementData字段是ArrayList用来存储的底层数组。② 所以只要我们获取到当前ArrayList类中该字段的值就可以知道该集合当前底层数组的长度public static void main(String[] args) { ArrayList arrayList=new ArrayList(); //获取类对象原创 2020-11-29 22:37:49 · 744 阅读 · 2 评论 -
Spring 依赖注入
依赖注入依赖注入属于IoC。五种关系:继承、依赖、关联、聚合、组合当创建User对象时,(dept对象不能为空),如何自动的创建Dept并将其赋给dept。*依赖注入需要IoC的环境,依赖的双方必须全部交给Spring管理。1 基于xml的依赖注入1.1简单类型的属性的依赖注入1.1.1 构造方法注入① 需要重载构造方法,一般开发中需要保留默认构造<bean id="user" class="com.pojo.User"> <!-- 为构造方法指定参数的值原创 2020-11-27 16:48:06 · 260 阅读 · 2 评论 -
Spring 基于注解的IoC
基于注解的IoC@Component@Component("类名")@Component(value="类名")组件,是类级别的注解,只能放在类的定义上面。Spring提供的IOC的基础注解。不写参数时代表:id=类名首字母小写作用:替换<bean>标签,其中value值代替id或name,class属性是通过注解所在的类名获取到的。衍生注解语义化的衍生注解,在Spring MVC中使用。@Repository一般用于定义dao层的bean。@Service一般用于定原创 2020-11-27 16:45:20 · 160 阅读 · 0 评论 -
Spring 基于XML的IoC
基于XML的IoC1 静态工厂类使用静态工厂来获取其他类**使用场景:**在整合第三方架构时,有提供的静态工厂类,我们想获取工厂类生成的对象①创建静态工厂类用于返回需要生成的类对象public class DaoFactory { /** * 返回创建的实例 * @return */ public static UserDao createUserDao() { return new UserDaoImpl(); }}②配置XML文件将静态工厂交给spring管原创 2020-11-27 16:43:39 · 144 阅读 · 0 评论 -
Spring AOP底层原理和使用
AOP面向切面编程通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率,提供了程序的扩展性。总结AOP是在不修改源码的情况下,对功能进行横向扩展。AOP是通过创建目标对象的代理对象,在代理对象调用方法时,进行增强,从而实现了功能的扩展。JDK的动态代理:只能代理生成实现过接口的实例。字节码的动态代理:可以代理生成任何类的实例。基于JDK动态代理的缺陷:s原创 2020-11-27 16:36:29 · 235 阅读 · 0 评论 -
Mybatis逆向工程创建和使用
官方文档:http://mybatis.org/generator/正向工程:先设计实体类及实体之间的关系,再创建数据库并设计表之间的关系。逆向工程:先设计数据库表,再通过数据库表关系,之后生成实体类及映射文件和接口。~~~mybatis官网提供了mybatis-generator项目,可以针对单表生成pojo,mapper接口及mapper映射文件,他提供了一套单表的crud的操作。~~~~~搭建逆向工程~实际开发过程中逆向工程不直接搭建在正式项目中,要单独创建一个项目,作为我原创 2020-11-23 16:37:42 · 306 阅读 · 0 评论 -
MyBatis分页插件(PageHelper)
如何使用MyBatis分页插件① 添加依赖pagehelper-x.y.z.jar 和 jsqlparser-x.y.z.jar两个依赖包。注意 依赖的版本是有要求的。~~~②配置PageHelper编辑全局配置文件注意 前提是项目中必须有依赖包。~~~在全局配置文件中添加代码:<plugins> <plugin interceptor="com.github.pagehelper.PageInterceptor"> <!--原创 2020-11-23 15:14:28 · 399 阅读 · 0 评论