<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[xiaoxiaoxiao_Ming的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/xiaoxiaoxiao_Ming</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; xiaoxiaoxiao_Ming]]></copyright><item><title><![CDATA[jar包解压替换文件并重新打包]]></title><link>https://blog.youkuaiyun.com/xiaoxiaoxiao_Ming/article/details/141635178</link><guid>https://blog.youkuaiyun.com/xiaoxiaoxiao_Ming/article/details/141635178</guid><author>xiaoxiaoxiao_Ming</author><pubDate>Wed, 28 Aug 2024 10:59:21 +0800</pubDate><description><![CDATA[find . -path './BOOT-INF/lib/*' -prune -o -print | zip -@ new.jar`：对除了`BOOT-INF/lib`目录下的文件之外的所有文件进行压缩并添加到`new.jar`中。`zip -r -0 new.jar BOOT-INF/lib`：将`BOOT-INF/lib`目录下的所有文件打包进`new.jar`，但是不进行压缩（`-0`选项）。将新的JAR文件拷贝到`BOOT-INF/lib`目录下，替换旧的文件。]]></description><category></category></item><item><title><![CDATA[利用切面（Aspect）实现出入参加解密及数据脱敏]]></title><link>https://blog.youkuaiyun.com/xiaoxiaoxiao_Ming/article/details/141393869</link><guid>https://blog.youkuaiyun.com/xiaoxiaoxiao_Ming/article/details/141393869</guid><author>xiaoxiaoxiao_Ming</author><pubDate>Wed, 21 Aug 2024 15:38:22 +0800</pubDate><description><![CDATA[创建一个注解，用于标记需要进行加解密处理的方法。在你的Controller中应用这个注解。@Secure// 这里接收到的数据已经被解密// 返回的数据会被加密通过以上步骤，我们使用Spring Boot中的AOP功能和自定义注解，实现了对请求参数的解密和对响应结果的加密，这些功能都由一个注解来完成。这种方法具有良好的扩展性和可维护性，适用于需要保护数据传输安全的场景。：指定该注解可以应用于字段。：指定该注解在运行时可用，通过反射可以获取到。]]></description><category></category></item><item><title><![CDATA[META-INF/services的使用]]></title><link>https://blog.youkuaiyun.com/xiaoxiaoxiao_Ming/article/details/141389077</link><guid>https://blog.youkuaiyun.com/xiaoxiaoxiao_Ming/article/details/141389077</guid><author>xiaoxiaoxiao_Ming</author><pubDate>Wed, 21 Aug 2024 11:28:43 +0800</pubDate><description><![CDATA[META-INF/services`目录和SPI机制在Java中提供了一种标准的方式来实现服务发现和动态加载。通过定义服务接口、实现类以及服务提供者配置文件，可以在运行时灵活地加载和使用不同的服务实现。这对于构建可扩展和模块化的系统非常有用。]]></description><category></category></item><item><title><![CDATA[META-INF/spring.factories的作用及优点]]></title><link>https://blog.youkuaiyun.com/xiaoxiaoxiao_Ming/article/details/141388838</link><guid>https://blog.youkuaiyun.com/xiaoxiaoxiao_Ming/article/details/141388838</guid><author>xiaoxiaoxiao_Ming</author><pubDate>Wed, 21 Aug 2024 11:22:02 +0800</pubDate><description><![CDATA[META-INF/spring.factories`文件是Spring Framework和Spring Boot中一个强大的工具，允许开发者通过配置文件的方式动态加载和配置各种组件和功能。它在自动配置、模块化和扩展性方面提供了显著的优势，使得Spring应用程序更加易于开发和维护。如果你有进一步的问题或具体的应用场景，请随时告诉我！]]></description><category></category></item><item><title><![CDATA[@FunctionalInterface注解分析及使用]]></title><link>https://blog.youkuaiyun.com/xiaoxiaoxiao_Ming/article/details/139802219</link><guid>https://blog.youkuaiyun.com/xiaoxiaoxiao_Ming/article/details/139802219</guid><author>xiaoxiaoxiao_Ming</author><pubDate>Wed, 19 Jun 2024 14:30:56 +0800</pubDate><description><![CDATA[这个接口定义了一个接受一个整数参数且没有返回值的方法apply。该接口没有提供具体的实现。函数式接口关注的是方法的签名，定义了方法的输入和输出，而具体的实现由使用者通过lambda表达式或方法引用来提供。这使得代码更加简洁和灵活，可以在不同的场景下轻松地提供不同的实现逻辑。]]></description><category></category></item><item><title><![CDATA[java设计模式之适配器模式（结构型模式）]]></title><link>https://blog.youkuaiyun.com/xiaoxiaoxiao_Ming/article/details/122582722</link><guid>https://blog.youkuaiyun.com/xiaoxiaoxiao_Ming/article/details/122582722</guid><author>xiaoxiaoxiao_Ming</author><pubDate>Wed, 19 Jan 2022 16:46:36 +0800</pubDate><description><![CDATA[适配器模式（Adapter）的定义如下：将一个类的接口转换成客户希望的另外一个接口，使得原本由于接口不兼容而不能一起工作的那些类能一起工作。适配器模式分为类结构型模式和对象结构型模式两种，前者类之间的耦合度比后者高，且要求程序员了解现有组件库中的相关组件的内部结构，所以应用相对较少些。

优点：

客户端通过适配器可以透明地调用目标接口。
	复用了现存的类，程序员不需要修改原有代码而重用现有的适配者类。
	将目标类和适配者类解耦，解决了目标类和适配者类接口不一致的问题。
	在很多业务场景中符合开闭原则。
缺]]></description><category></category></item><item><title><![CDATA[Java设计模式之建造者模式（创建型模式）]]></title><link>https://blog.youkuaiyun.com/xiaoxiaoxiao_Ming/article/details/122576775</link><guid>https://blog.youkuaiyun.com/xiaoxiaoxiao_Ming/article/details/122576775</guid><author>xiaoxiaoxiao_Ming</author><pubDate>Wed, 19 Jan 2022 13:35:11 +0800</pubDate><description><![CDATA[定义

建造者（Builder）模式的定义：指将一个复杂对象的构造与它的表示分离，使同样的构建过程可以创建不同的表示，这样的设计模式被称为建造者模式或者生成器模式。它是将一个复杂的对象分解为多个简单的对象，然后一步一步构建而成。它将变与不变相分离，即产品的组成部分是不变的，但每一部分是可以灵活选择的

优点

封装性好，构建和表示分离。
	扩展性好，各个具体的建造者相互独立，有利于系统的解耦。
	客户端不必知道产品内部组成的细节，建造者可以对创建过程逐步细化，而不对其它模块产生任何影响，便于控制细节风险。
]]></description><category></category></item><item><title><![CDATA[Java设计模式之工厂模式（创建型模式）]]></title><link>https://blog.youkuaiyun.com/xiaoxiaoxiao_Ming/article/details/122574692</link><guid>https://blog.youkuaiyun.com/xiaoxiaoxiao_Ming/article/details/122574692</guid><author>xiaoxiaoxiao_Ming</author><pubDate>Wed, 19 Jan 2022 11:00:13 +0800</pubDate><description><![CDATA[一、简单工厂模式

简单来说，简单工厂模式有一个具体的工厂类，可以生成多个不同的产品

优点：
工厂类包含必要的逻辑判断，可以决定在什么时候创建哪一个产品的实例。客户端可以免除直接创建产品对象的职责，很方便的创建出相应的产品。工厂和产品的职责区分明确。
客户端无需知道所创建具体产品的类名，只需知道参数即可。
也可以引入配置文件，在不修改客户端代码的情况下更换和添加新的具体产品类。缺点：
简单工厂模式的工厂类单一，负责所有产品的创建，职责过重，一旦异常，整个系统将受影响。且工厂类代码会非常臃肿，违背高聚合原则]]></description><category></category></item><item><title><![CDATA[Java设计模式之单例模式（创建型模式）]]></title><link>https://blog.youkuaiyun.com/xiaoxiaoxiao_Ming/article/details/122534260</link><guid>https://blog.youkuaiyun.com/xiaoxiaoxiao_Ming/article/details/122534260</guid><author>xiaoxiaoxiao_Ming</author><pubDate>Mon, 17 Jan 2022 16:27:26 +0800</pubDate><description><![CDATA[1、单例模式

单例模式的优点：
单例模式可以保证内存里只有一个实例，减少了内存的开销。
可以避免对资源的多重占用。
单例模式设置全局访问点，可以优化和共享资源的访问。

单例模式的缺点：
单例模式一般没有接口，扩展困难。如果要扩展，则除了修改原来的代码，没有第二种途径，违背开闭原则。
在并发测试中，单例模式不利于代码调试。在调试过程中，如果单例中的代码没有执行完，也不能模拟生成一个新的对象。
单例模式的功能代码通常写在一个类中，如果功能设计不合理，则很容易违背单一职责原则。

应用场景：

1、需要频繁创]]></description><category></category></item><item><title><![CDATA[java基础之反射]]></title><link>https://blog.youkuaiyun.com/xiaoxiaoxiao_Ming/article/details/122534852</link><guid>https://blog.youkuaiyun.com/xiaoxiaoxiao_Ming/article/details/122534852</guid><author>xiaoxiaoxiao_Ming</author><pubDate>Mon, 17 Jan 2022 10:36:11 +0800</pubDate><description><![CDATA[1.获取类对象 Class class = Class.forName("pojo.Hero");
2.获取构造器对象 Constructor con = clazz.getConstructor(形参.class);
3 获取（实例化）对象 Hero hero =con.newInstance(实参);

通过Class对象可以获取某个类中的：构造方法、成员变量、成员方法；并访问成员；

1.获取构造方法：


1).批量的方法：
public Constructor[] getConstructors(]]></description><category></category></item><item><title><![CDATA[java创建线程的三种方式及相关知识]]></title><link>https://blog.youkuaiyun.com/xiaoxiaoxiao_Ming/article/details/122436045</link><guid>https://blog.youkuaiyun.com/xiaoxiaoxiao_Ming/article/details/122436045</guid><author>xiaoxiaoxiao_Ming</author><pubDate>Tue, 11 Jan 2022 19:18:31 +0800</pubDate><description><![CDATA[1、继承Thread类创建线程类

a、定义Thread类的子类，并重写该类的run方法，该run方法的方法体就代表了线程要完成的任务。因此把run()方法称为执行体。
b、创建Thread子类的实例，即创建了线程对象。
c、调用线程对象的start()方法来启动该线程


public static void main(String[] args) {
        System.out.println("==========创建线程");
        new Thread(){
         ]]></description><category></category></item><item><title><![CDATA[java8之CompletableFuture异步任务]]></title><link>https://blog.youkuaiyun.com/xiaoxiaoxiao_Ming/article/details/122349314</link><guid>https://blog.youkuaiyun.com/xiaoxiaoxiao_Ming/article/details/122349314</guid><author>xiaoxiaoxiao_Ming</author><pubDate>Thu, 06 Jan 2022 18:24:32 +0800</pubDate><description><![CDATA[CompletableFuture是java.util.concurrent库在java 8中新增的主要工具，同传统的Future相比，其支持流式计算、函数式编程、完成通知、自定义异常处理等很多新的特性。同传统的Future相比较，CompletableFuture能够主动设置计算的结果值（主动终结计算过程，即completable），从而在某些场景下主动结束阻塞等待。而Future由于不能主动设置计算结果值，一旦调用get()进行阻塞等待，要么当计算结果产生，要么超时，才会返回

1. 创建Complet]]></description><category></category></item><item><title><![CDATA[java基础之赋值操作]]></title><link>https://blog.youkuaiyun.com/xiaoxiaoxiao_Ming/article/details/122061727</link><guid>https://blog.youkuaiyun.com/xiaoxiaoxiao_Ming/article/details/122061727</guid><author>xiaoxiaoxiao_Ming</author><pubDate>Fri, 24 Dec 2021 16:06:30 +0800</pubDate><description><![CDATA[提要：对于基本类型（字符类型char,布尔类型boolean以及数值类型byte、short、int、long、float、double）来说=就是直接拷贝内容，对于对象的 = 赋值的是对象的地址，故基本数据类型赋值之后变量的操作不影响原始值，而对象赋值给变量之后的操作是会改变原对象里面的值

例1、基本数据类型赋值


public static void main(String[] args) throws Exception {
        Stutent stutent = new Stut..]]></description><category></category></item><item><title><![CDATA[springboot2整合kafka]]></title><link>https://blog.youkuaiyun.com/xiaoxiaoxiao_Ming/article/details/121904902</link><guid>https://blog.youkuaiyun.com/xiaoxiaoxiao_Ming/article/details/121904902</guid><author>xiaoxiaoxiao_Ming</author><pubDate>Mon, 13 Dec 2021 15:13:38 +0800</pubDate><description><![CDATA[一、安装kafka（前提是已安装了zookeeper），这里介绍docker安装方式


docker run  -d --name kafka \
-p 9092:9092 \
-e KAFKA_BROKER_ID=0 \
-e KAFKA_ZOOKEEPER_CONNECT=xxxx:12181 \
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://xxxx:9092 \
-e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 \
-t ]]></description><category></category></item><item><title><![CDATA[spingboot2整合dubbo]]></title><link>https://blog.youkuaiyun.com/xiaoxiaoxiao_Ming/article/details/121861894</link><guid>https://blog.youkuaiyun.com/xiaoxiaoxiao_Ming/article/details/121861894</guid><author>xiaoxiaoxiao_Ming</author><pubDate>Fri, 10 Dec 2021 18:10:29 +0800</pubDate><description><![CDATA[一、引入依赖（Dubbo 如今已被阿里卖给 Apache 维护和管理，所以最好是引入apache下面的包，网上七七八八的包一大堆，着实让人眼花缭乱，什么com.alibaba.boot，com.alibaba.spring.boot，io.dubbo.springboot等，都快看吐了）


&lt;!--dubbo-springBoot依赖--&gt;
        &lt;dependency&gt;
            &lt;groupId&gt;org.apache.dubbo&lt;/gr]]></description><category></category></item><item><title><![CDATA[springboot2整合log4j2]]></title><link>https://blog.youkuaiyun.com/xiaoxiaoxiao_Ming/article/details/121746067</link><guid>https://blog.youkuaiyun.com/xiaoxiaoxiao_Ming/article/details/121746067</guid><author>xiaoxiaoxiao_Ming</author><pubDate>Mon, 06 Dec 2021 14:43:48 +0800</pubDate><description><![CDATA[一、引入依赖


&lt;dependency&gt; &lt;!-- 引入log4j2依赖 --&gt;
     &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
     &lt;artifactId&gt;spring-boot-starter-log4j2&lt;/artifactId&gt;
&lt;/dependency&gt;

二、去除logback依赖


&lt;dependency&gt;
	&lt;groupId&gt;]]></description><category></category></item><item><title><![CDATA[centos8修改docker容器默认安装位置及docker相关操作]]></title><link>https://blog.youkuaiyun.com/xiaoxiaoxiao_Ming/article/details/121537605</link><guid>https://blog.youkuaiyun.com/xiaoxiaoxiao_Ming/article/details/121537605</guid><author>xiaoxiaoxiao_Ming</author><pubDate>Thu, 25 Nov 2021 15:01:13 +0800</pubDate><description><![CDATA[通过 yum 的方式安装docker环境，默认存储位置是系统盘下面的/var/lib/docker，默认pid 存放位置是 /var/run/docker.pid。一般我们系统盘空间都不是很大，所以有时候需要调整存储位置。

针对centos8的具体操作方法如下：

1、停止docker服务：


systemctl stop docker

2、在挂载的非系统盘创建存放docker信息的目录(本文路径/app/middleware/docker)：


cd /app
mkdir middlewar...]]></description><category></category></item><item><title><![CDATA[activeMq部署安装及在springboot中实现消息的发布订阅]]></title><link>https://blog.youkuaiyun.com/xiaoxiaoxiao_Ming/article/details/121509091</link><guid>https://blog.youkuaiyun.com/xiaoxiaoxiao_Ming/article/details/121509091</guid><author>xiaoxiaoxiao_Ming</author><pubDate>Wed, 24 Nov 2021 11:01:48 +0800</pubDate><description><![CDATA[一、linux环境部署

1、下载安装包（地址戳这里）apache-activemq-5.16.3-bin.tar.gz并上传到云服务器。

2、解压：tar -zvxf apache-activemq-5.16.3-bin.tar.gz

3、相关配置文件

activemq.xml可以修改各协议连接的ip地址：



jetty.xml可以修改管理后台的ip及端口



jetty-realm.properties可查看账户名及密码

4、进入bin目录执行./activemq start命令启动act]]></description><category></category></item><item><title><![CDATA[springboot使用redisTemplate+websocket实现集群消息的发布订阅]]></title><link>https://blog.youkuaiyun.com/xiaoxiaoxiao_Ming/article/details/121468064</link><guid>https://blog.youkuaiyun.com/xiaoxiaoxiao_Ming/article/details/121468064</guid><author>xiaoxiaoxiao_Ming</author><pubDate>Mon, 22 Nov 2021 15:07:53 +0800</pubDate><description><![CDATA[本文主要介绍小项目中如何通过redisTemplate+websocket实现后端向前端推送消息

一、websocket配置类


@Component
public class WebsocketConfig {
    /**
     * ServerEndpointExporter 作用
     * &lt;p&gt;
     * 这个Bean会自动注册使用@ServerEndpoint注解声明的websocket endpoint
     *
     * @return
     */
]]></description><category></category></item><item><title><![CDATA[ElasticSearch7之function_socre使用心得]]></title><link>https://blog.youkuaiyun.com/xiaoxiaoxiao_Ming/article/details/121402314</link><guid>https://blog.youkuaiyun.com/xiaoxiaoxiao_Ming/article/details/121402314</guid><author>xiaoxiaoxiao_Ming</author><pubDate>Thu, 18 Nov 2021 16:06:25 +0800</pubDate><description><![CDATA[介绍：
1、function_score是可以修改查询检索文档的分数，使用function_score必须定义​​一个查询和一个或多个函数，为查询返回的每个文档计算一个新的分数。

function_score提供的评分函数：
1、weight : 设置一个float类型的权重值，使最终分数是查询分数与该权重值的乘积

2、field_value_factor : 允许使用文档中的字段来影响分数


GET /_search
{
  "query": {
    "function_score": {
  ]]></description><category></category></item></channel></rss>