- 博客(53)
- 收藏
- 关注
原创 记录一次出现循环依赖问题
Spring会在创建bean的过程中,将尚未完全初始化的bean实例暴露在一个早期引用的缓存中,这样其他bean在依赖时可以引用到这个早期的实例。对于原型作用域,情况就不同了。原因是原型bean在每次请求时都会创建一个新的实例,Spring无法像处理单例bean那样在创建过程中缓存和注入未完全初始化的bean实例。因此,当A模块和B模块都配置为原型作用域并且相互依赖时,Spring会在尝试创建bean时抛出一个BeanCurrentlyInCreationException,因为它无法解决这种循环依赖。
2024-09-30 13:44:03 247
原创 Spring中ImportBeanDefinitionRegistrar源码和使用
spring的ImportBeanDefinitionRegistrar处理器,可以对于spring的BeanDefinitionMap进行操作,可以修改Bean的描述,此时还没有变成对象,这里是把创建注入的类型,创建了构造方法中需要的接口,最后取Bean的名字:payServiceTest,一个BeanDefinition描述。第二步:使用FactoryBean,通过getObject方式,创建一个对象,放入到spring容器中,这里使用代理对象,放入到spring容器中。
2024-08-04 15:02:31 214
原创 服务一直挂掉原因和解决方法,JVM内存溢出。
这里可以看到,设置的堆开始值15个G,最大值也是15G。当jvm的新生代一直在生产对象,但是又没有办法回收的时候,新生代就持续增加,当到达了一定的量。此时java服务在运行中又生产了新的对象去申请内存,这个时候,内存已经满了,申请不到内存,就发生了内存溢出了。查看监控平台中服务器的指标,发现内存在半个小时内会清空一次,然后又慢慢涨上来达到一个平稳的状态,这个时候,就怀疑是不是因为内存不够导致了,然后出现了OOM内存溢出,CG异常。内存溢出:申请的内存超出了JVM能提供的内存大小,此时称之为溢出。
2024-08-04 14:51:36 528
原创 Java8,函数式编程应用:
比如我们要使用前置要做的事情,然后调用方法自己的逻辑,最后在执行一个后置要做的事情,其中前置流程和后置流程都是共有的流程。那么就可以使用函数式的变成去封装方法,然后每个地方都可以直接调用。我们可以在一个接口上使用 @FunctionalInterface 注解,这样做可以检 查它是否是一个函数式接口。如果没有函数式编程,我们可能会想到反射的方式,传入一个类,一个方法,然后通过反射的方式去调用这个类中的某个方法,从而可以达到这种实现,但是太麻烦了。只包含一个抽象方法的接口,称为函数式接口。
2024-03-04 21:16:51 480
原创 java.lang.NoClassDefFoundError: lombok/Data报错问题.
可以看到这个类中有一个好几个Data。这里就很严重了,造成这个问题的原因是把Date写成了Data了。所以会报错lombok/Data问题。要全局检查这样属性写成Data,然后引用的是lombok.Data的包,这种地方。
2024-03-04 15:20:51 884
原创 spring日志
这个地方是Mybatis中的JCL,这个地方是一个接口,会有很多实现,比如JUL,LOG4J,SLF4J等,这些日志的实现,所以,spring5或者spring4都可以用,但是spring5用的是JUL,JUL的日志级别是
2022-07-14 10:38:54 133
原创 springMVC
从源码的角度来看SpringMVC./mvnw clean install -DskipTests -PfastSpringMVC 核心流程先上图:SpringMVC核心流程图简单总结:首先请求进入DispatcherServlet 由DispatcherServlet 从HandlerMappings中提取对应的Handler此时只是获取到了对应的Handle,然后得去寻找对应的适配器,即:HandlerAdapter拿到对应HandlerAdapter时,这时候开始调用对应的Handle
2022-07-14 10:38:11 194
原创 Java 多线程下载文件
package cn.com.skyvis.Mystudy;import java.io.InputStream;import java.io.RandomAccessFile;import java.net.HttpURLConnection;import java.net.URL;import java.util.concurrent.CountDownLatch;public class MutiThreadDownLoad { /** * 同时下载的线程数
2022-07-14 10:37:40 1061
原创 ReentrantReadWriteLock
读锁应该插队吗?以及什么是读写锁的升降级。读锁插队策略首先,我们来看一下读锁的插队策略,公平与非公平锁中讲到的 ReentrantLock,如果锁被设置为非公平,那么它是可以在前面线程释放锁的瞬间进行插队的,而不需要进行排队。在读写锁这里,策略也是这样的吗?首先,我们看到 ReentrantReadWriteLock 可以设置为公平或者非公平,代码如下:公平锁:ReentrantReadWriteLock reentrantReadWriteLock = new ReentrantReadWrit
2022-07-07 10:37:03 183
原创 工具类XMLUtil(解析返回soap和xml报文,获取目标节点值)
1.支持jar包(可能存在版本冲突)<!-- https://mvnrepository.com/artifact/org.jdom/jdom --><dependency> <groupId>org.jdom</groupId> <artifactId>jdom</artifactId> <version>1.1.3</version></dependency>2.
2022-04-21 09:52:19 1396 2
原创 反射:newInstance()根据包名加类名得到具体类对象接口,调用指定类中的方法.
通过指定的包名加类名,通过反射newInstance()方法得到实现了BaseAcs接口的类,从而调用指定实现类中的业务流程.比如通过在数据库中添加每个实现类的包名加类名,那么查询出来指定的数据就可以更加灵活. /** * 根据class名称创建对象 * @param className class完整路径:包名加类名 * @return */ public static BaseAcs getInstance(String className){
2022-04-21 09:49:46 946
原创 sh文件内容启动文件
#!/bin/bashbashParam="$-"if [ 0 -eq $# ]; then echo "Need param $0 <start|stop|restart> "fiOPERATION=$1#SYNDATA_HOME=$(cd "$(dirname "$0")" && pwd)CUR_DIR=$(cd `dirname "$0"`; pwd)SYNDATA_HOME=$(cd ${CUR_DIR}/..; pwd)JAVAHOME=${
2022-04-21 09:38:27 151
原创 java 使用ftp下载远程服务器文件
第一种方法连接中带有账号密码直接远程下载: public Result<?> download(){ //进行下载文件---------------------------------开始 //远程服务器下载地址 String fileurl = "ftp://superAdmin:superAdmin123@192.168.1.8:8888/usr/mp4pt/rec/CHN0/10110120011100/00001.mp4"; /
2022-04-21 09:29:39 2261
原创 java根据PostMan发送请求:设置接口请求工具类。
我们使用java代码进行接口远程调用第三方接口时,总会抒写接口代码,那么有这么多种方式进行发送请求。那我们应该怎么使用呢?比如有webservice接口,比如有Post请求的接口,必须有Get请求的接口。比如传的参数有xml的形式,比如传的参数有json格式等等格式情况,那我们的接口请求代码应该如何区别,抒写呢?我们要根据postMan中的方式来,只要是能够通过postMan发送成功的请求都可以使用首先是我们的请求方式:第一点:在postMan的请求方式有:GET、POST、PUT、DELETE请求
2022-03-21 18:18:33 5001 2
原创 为什么要重写hashcode方法和equals方法理论源码解析
为什么要重写hashcode方法和equals方法我们可能经常听到说重写equals方法必须重写hashcode方法,这是为什么呢?java中所有的类都是Object的子类,直接上object源码/* * Copyright (c) 1994, 2012, Oracle and/or its affiliates. All rights reserved. * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. *
2021-10-21 12:57:50 183
原创 HashMap底层原理解析JDK1.7与JDK1.8(二)
JDK1.8通过put中的key去取到下标。key---->key.hashcode()----->然后去取余table.lenght------>inde-----0-7hashCoude转换取余以后会转换成数组的下标比如1,2等。用数组去存储的数据,指定下标去查找,时间复杂度O(1),对于一般的插入操作,涉及到数组元素的移动,平均复杂度是O(N).数组长度16为什么要去减去1,然后进行与运算。**重点链表转化为红黑树,需要链表的长度大于8,但是在转变成R-B tree之
2021-10-20 18:28:35 182
原创 SpringIOC学习
如果对于一个类,突然需要代理了,那么以前是通过new出来的就会出问题.我们一个类的参生不应该通过new出来,应该面向抽象编程.IOC 和DI有什么区别和关系:IOC控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度.启动最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫"依赖查找"(Dependency Lookup)IOC是一种编程中需要达到的目标,DI是实现IOC的一种技
2020-12-27 17:22:50 120
原创 docker离线安装并导入镜像,dockers挂载文件夹和文件,dockers宿主机和容器之间文件和文件夹拷贝。
docker离线安装并导入镜像1、下载docker安装文件离线安装docker,需要下载docker的安装文件。地址:https://download.docker.com/linux/static/stable/x86_64/下载兼容的或者最新的docker安装包.2、离线docker安装将安装包文件上传到服务器目录并解压。docker解压到自己随意指定目录即可[root@iZbp13sno1lc2yxlhjc4b3Z ~]#tar -xvf docker-19.03.6.tar将d
2020-12-23 09:25:28 855
原创 设计模式----策略模式案例分析
策略模式.策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。用一句话来说,就是:“准备一组算法,并将每一个算法封装起来,使得它们可以互换”abstract class Duck { //声明接口 protected FlyBehavior flyBehavior; protected QuackBehavior quackBehavior; //调用接口中的方法
2020-10-03 14:03:54 217
原创 设计模式---桥接模式案例分析.
桥接模式属于结构型设计模式。设计意图:将抽象部分与实现部分分离,使它们都可以独立的变化。一看到设计意图,大家可能有些发懵,我们看到的继承和接口不都是抽象和实现分离的吗?尤其是接口和抽象类都是这样的实现啊!那怎么还有这么个桥接的分离呢?举一个例子:比如有男人,女人,老人,他们都要上网做事情,男人上网玩英雄联盟,女人上网学习,老人上网玩连连看.如何实现呢?我们先不用桥接模式来实现一下:首先我们先不用桥接模式看看如何实现效果及实现要点:1.Bridge模式使用“对象间的组合关系”解耦了抽象和实..
2020-10-03 11:26:03 454
原创 Java Mybatis foreach嵌套foreach List<list<Object>>
在做mybatis的mapper.xml文件的时候,我们时常用到这样的情况:动态生成sql语句的查询条件,这个时候我们就可以用mybatis的foreach了foreach元素的属性主要有item,index,collection,open,separator,close。item:集合中元素迭代时的别名,该参数为必选。index:在list和数组中,index是元素的序号,在map中,index是元素的key,该参数可选open:foreach代码的开始符号,一般是(和close=")"合用。.
2020-09-11 16:56:07 4236
原创 创建定时器任务,并控制定时器任务启动,停止,开机自动启动,线程Run()方法中调用外部方法。
public class QuartzJobServiceImpl implements IQuartzJobService {@Autowiredprivate ThreadPoolTaskScheduler threadPoolTaskScheduler;/** * 在ScheduledFuture中有一个cancel可以停止定时任务。 */private ScheduledFuture<?> future;/*存放定时器任务的map,用于启动停止定时器任务*/publi
2020-09-06 17:35:19 664
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人