<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Abracadabra__的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Abracadabra__</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Abracadabra__]]></copyright><item><title><![CDATA[@ConfigurationProperties放在类上跟放在方法上有什么区别]]></title><link>https://blog.youkuaiyun.com/Abracadabra__/article/details/118276419</link><guid>https://blog.youkuaiyun.com/Abracadabra__/article/details/118276419</guid><author>Abracadabra__</author><pubDate>Sun, 27 Jun 2021 17:00:36 +0800</pubDate><description><![CDATA[声明数据源的时候，在类上写@ConfigurationProperties(prefix = “druid.spring.datasource”)
查询的时候对应的数据源是没有绑定的
注：这个表示的意思是，使用"druid.spring.datasource"的配置来初始化DruidDataSourceConfig类，初始化这个类的时候，对应的配置就是druid.spring.datasource+字段名称

@ConfigurationProperties（使用properties文件中的配置值初始化配置]]></description><category></category></item><item><title><![CDATA[Spring-Boot数据源]]></title><link>https://blog.youkuaiyun.com/Abracadabra__/article/details/117913733</link><guid>https://blog.youkuaiyun.com/Abracadabra__/article/details/117913733</guid><author>Abracadabra__</author><pubDate>Sun, 20 Jun 2021 22:24:29 +0800</pubDate><description><![CDATA[1、数据源的自动配置类
DataSourceConfiguration

]]></description><category></category></item><item><title><![CDATA[SpringBoot成功启动后自动关闭]]></title><link>https://blog.youkuaiyun.com/Abracadabra__/article/details/117905012</link><guid>https://blog.youkuaiyun.com/Abracadabra__/article/details/117905012</guid><author>Abracadabra__</author><pubDate>Mon, 14 Jun 2021 20:25:15 +0800</pubDate><description><![CDATA[1、 SpringBoot成功启动后自动关闭

原因：pom文件中没有添加 springboot-starter-web
 &lt;dependency&gt;
      &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
      &lt;artifactId&gt;spring-boot-starter-web&lt;/artifactId&gt;
&lt;/dependency&gt;


...]]></description><category></category></item><item><title><![CDATA[腾讯云CentOS7.6搭建rabbitMq]]></title><link>https://blog.youkuaiyun.com/Abracadabra__/article/details/113482405</link><guid>https://blog.youkuaiyun.com/Abracadabra__/article/details/113482405</guid><author>Abracadabra__</author><pubDate>Sun, 31 Jan 2021 18:35:52 +0800</pubDate><description><![CDATA[需要注意的点：
1、注意Erlang和RabbitMq的版本一定要匹配，版本不一致会导致rabbitmq启动不了；
Erlang和RabbitMQ版本信息
2、
安装方式：
腾讯云中安装RabbitMq
此种安装方式中没有考虑erlang和rabbitmq的版本问题；
版本和erlang匹配见：
centos安装rabbitmq

...]]></description><category></category></item><item><title><![CDATA[Mybatis插件-责任链模式]]></title><link>https://blog.youkuaiyun.com/Abracadabra__/article/details/112974805</link><guid>https://blog.youkuaiyun.com/Abracadabra__/article/details/112974805</guid><author>Abracadabra__</author><pubDate>Thu, 21 Jan 2021 23:30:23 +0800</pubDate><description><![CDATA[责任链模式：将完整的、臃肿的接受者的实现逻辑拆分到多个只包含部分逻辑的、功能单一的Handler处理类中，开发人员可以根据业务需求将多个Handler对象组合成一条责任链，实现请求的处理。在一条责任链中，每个Handler对象都包含对下一个Handler对象的引用，一个Hanlder对象处理完请求消息（或不能处理该请求）时，会把请求传给下一个Handler对象继续处理，依次类推，直至整条责任链结束。

场景：消息中有ABC三个字段，接受者HandlerA，HandlerB，HandlerC分别实现了处理三个]]></description><category></category></item><item><title><![CDATA[mybatis事务DefaultSqlSession-策略模式]]></title><link>https://blog.youkuaiyun.com/Abracadabra__/article/details/112973309</link><guid>https://blog.youkuaiyun.com/Abracadabra__/article/details/112973309</guid><author>Abracadabra__</author><pubDate>Thu, 21 Jan 2021 22:01:37 +0800</pubDate><description><![CDATA[背景：定义多种行为，根据不同的场景选择不同的行为；
策略模式：定义了一些列算法，将每一个算法封装起来，由不同的类进行管理，并让他们之间相互替换。这样，每种算法都可以独立地变化。

Context：行为的调用者
Strategy：行为的统一抽象接口
ConcreteStrategy：具体的算法实现（多个）
行为增加时：增加ConcreteStrategy；策略方案变更时：新增Context；
可以将反射技术和策略模式结合，这样应用程序就不需要了解所有Strategy接口实现类，而是在运行时通过反射的方式创建实]]></description><category></category></item><item><title><![CDATA[Mybatis缓存和事务管理-模板模式]]></title><link>https://blog.youkuaiyun.com/Abracadabra__/article/details/112972519</link><guid>https://blog.youkuaiyun.com/Abracadabra__/article/details/112972519</guid><author>Abracadabra__</author><pubDate>Thu, 21 Jan 2021 21:20:44 +0800</pubDate><description><![CDATA[**背景**：某个方法要实现的算法需要多个步骤，但其中有一些步骤是固定不变的，而另一些步骤则是不固定的。为了提高代码的可扩展性和可维护性，模板方法模式在这种场景下就派上了用场。
在模板方法模式中，一个算法可以分为多个步骤，这些步骤的执行次序在一个被称为“模板方法”的方法中定义，而算法的每个步骤都对应着一个方法，这些方法被称为“基本方法”。模板方法按照它定义的顺序依次调用多个基本方法，从而实现整个算法流程。在模板方法模式中，会将模板方法的实现以及那些固定不变的基本方法的实现放在子类中，而那些不固定的基本方法在]]></description><category></category></item><item><title><![CDATA[Mybatis动态sql处理——组合模式]]></title><link>https://blog.youkuaiyun.com/Abracadabra__/article/details/112854500</link><guid>https://blog.youkuaiyun.com/Abracadabra__/article/details/112854500</guid><author>Abracadabra__</author><pubDate>Tue, 19 Jan 2021 23:05:20 +0800</pubDate><description><![CDATA[组合模式：将对象组合成树形结构，以表示“部分-整体”的层次结构(一般是树形结构)。用户可以像处理一个简单对象一样处理一个复杂对象，从而使得调用者无须了解复杂元素的内部结构。
抽象组件 (Component)：Component接口定义了树形结构中所有类的公共行为，例如这里的operation()方法。一般情况下，还会定义一些用于管理子组件的方法，例如add()，remove()，getChild();
树叶(Leaf)：Leaf在树形结构中表示叶节点对象，叶节点没有子节点。
树枝(Composite)：定义]]></description><category></category></item><item><title><![CDATA[Mybatis映射文件XML解析-建造者模式]]></title><link>https://blog.youkuaiyun.com/Abracadabra__/article/details/112853470</link><guid>https://blog.youkuaiyun.com/Abracadabra__/article/details/112853470</guid><author>Abracadabra__</author><pubDate>Tue, 19 Jan 2021 22:06:26 +0800</pubDate><description><![CDATA[建造者模式：将一个复杂对象的构建过程分成了一步步简单的步骤，用户只需要了解复杂对象的类型和内容，而无须关注复杂对象的具体构建过程，帮助用户屏蔽掉了复杂对象内部的具体构建细节。

建造者Bilder接口：Builder接口用于定义建造者构建产品对象的各部分的行为。
具体建造者ConcreteBilder：在建造者模式中，直接创建产品对象的是具体建造者。具体建造者必须实现建造者接口所要求的两类方法：一类是建造方法，例如buildPart()等方法；另一类是获取构建好的产品对象的方法buildProduct();]]></description><category></category></item><item><title><![CDATA[Mybatis缓存模块-装饰器模式]]></title><link>https://blog.youkuaiyun.com/Abracadabra__/article/details/112797216</link><guid>https://blog.youkuaiyun.com/Abracadabra__/article/details/112797216</guid><author>Abracadabra__</author><pubDate>Mon, 18 Jan 2021 23:13:42 +0800</pubDate><description><![CDATA[背景：在实践生产中，新需求在软件的整个生命过程中总是不断出现的。当有新需求出现时，就需要为某些组件添加新的功能来满足这些需求。
添加需求的方式
1、直接修改已有代码并添加新的功能。——破坏原有系统的稳定性，违反“开放-封闭”原则。
2、使用继承，创建子类并在子类中添加新功能实现扩展。——已有组件被final修饰不可行，待添加的新功能存在多种组合，使用继承方式可能会导致大量子类的出现。
3、装饰器模式——基于组合的方式实现该功能。
装饰器包含的角色：
Component(组件)：组件接口定义了全部组件实现类以]]></description><category></category></item><item><title><![CDATA[工厂模式-数据源+事务]]></title><link>https://blog.youkuaiyun.com/Abracadabra__/article/details/112760204</link><guid>https://blog.youkuaiyun.com/Abracadabra__/article/details/112760204</guid><author>Abracadabra__</author><pubDate>Sun, 17 Jan 2021 23:55:16 +0800</pubDate><description><![CDATA[工厂方法模式
工厂模式：定义一个创建对象的工厂类，根据工厂接口的具体实现类决定具体实例化哪一个具体产品类。
工厂方法模式有四个角色构成
工厂接口(Factory):工厂接口是工厂方法模式的核心接口，调用者会直接与工厂接口交互用于获取具体的产品实现类。
具体工厂类(ConcreteFactory):具体工厂类是工厂接口的实现类，用于实例化产品对象，不同的具体工厂类会根据需要实例化不同的产品实现类。
产品接口(Product):产品接口用于定义产品类的功能，具体工厂类产生的所有产品对象都必须实现该接口。调用者一]]></description><category></category></item><item><title><![CDATA[代理模式-JDBC调试]]></title><link>https://blog.youkuaiyun.com/Abracadabra__/article/details/112759332</link><guid>https://blog.youkuaiyun.com/Abracadabra__/article/details/112759332</guid><author>Abracadabra__</author><pubDate>Sun, 17 Jan 2021 22:37:10 +0800</pubDate><description><![CDATA[Mybatis技术内幕-设计模式与应用场景总结
2、代理模式和JDK动态代理
静态代理模式
静态代理模式中涉及到的角色：
Suject：是程序中的业务逻辑接口；
RealSubject：是实现了Subject接口的真正业务类；
Proxy：是实现了Subject接口的代理类，其中封装了RealSubject对象。在程序中不会直接调动RealSubject对象的方法，而是使用Proxy对象实现相关功能。
代理模式：Proxy.operation()方法的实现会调用RealSubject对象的operation]]></description><category></category></item><item><title><![CDATA[适配器模式-日志模块]]></title><link>https://blog.youkuaiyun.com/Abracadabra__/article/details/112759311</link><guid>https://blog.youkuaiyun.com/Abracadabra__/article/details/112759311</guid><author>Abracadabra__</author><pubDate>Sun, 17 Jan 2021 22:35:40 +0800</pubDate><description><![CDATA[Mybatis技术内幕-设计模式与应用场景总结
1、适配器模式
主要解决由于接口不能兼容而导致类无法使用的问题，适配器模式会将需要适配的类转换成调用者能够使用的目标接口。主要涉及以下几个角色：
目标接口Target：调用者能够直接使用的接口；
需要适配的类Adaptee:Adaptee中有真正的业务逻辑，但是不能被调用者直接使用；
适配器：Adapter实现了Target接口，并包装一个Adaptee对象，Adapter在实现Target接口中的方法时，会将调用委托给Adaptee对象的相关对象，由Adap]]></description><category></category></item><item><title><![CDATA[Mybatis技术内幕-设计模式与应用场景总结]]></title><link>https://blog.youkuaiyun.com/Abracadabra__/article/details/112734683</link><guid>https://blog.youkuaiyun.com/Abracadabra__/article/details/112734683</guid><author>Abracadabra__</author><pubDate>Sun, 17 Jan 2021 13:43:52 +0800</pubDate><description><![CDATA[Mybatis技术内幕-设计模式与应用场景总结
1、适配器模式
主要解决由于接口不能兼容而导致类无法使用的问题，适配器模式会将需要适配的类转换成调用者能够使用的目标接口。主要涉及一下几个角色：
目标接口Target：调用者能够直接使用的接口；
需要适配的类Adaptee:Adaptee中有真正的业务逻辑，但是不能被调用者直接使用；
适配器：Adapter实现了Target接口，并包装一个Adaptee对象，Adapter在实现Target接口中的方法时，会将调用委托给Adaptee对象的相关对象，由Adap]]></description><category></category></item><item><title><![CDATA[Java反射]]></title><link>https://blog.youkuaiyun.com/Abracadabra__/article/details/105322456</link><guid>https://blog.youkuaiyun.com/Abracadabra__/article/details/105322456</guid><author>Abracadabra__</author><pubDate>Sun, 05 Apr 2020 09:41:22 +0800</pubDate><description><![CDATA[反射
Java反射机制是指在运行状态中，对于任意一个类，都能够知道这个类的所有属性和方法；对于任意一个对象，都能够调用它的任意一个方法和属性；这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。
反射是框架的灵魂，它可以有效地降低类之间的耦合，很多框架都运用了反射原理，例如hibernate 的实体类，Spring的AOP等等都有反射的实现。
获取公共构造器 getConst...]]></description><category></category></item><item><title><![CDATA[设计模式]]></title><link>https://blog.youkuaiyun.com/Abracadabra__/article/details/105322203</link><guid>https://blog.youkuaiyun.com/Abracadabra__/article/details/105322203</guid><author>Abracadabra__</author><pubDate>Sun, 05 Apr 2020 09:36:51 +0800</pubDate><description><![CDATA[基础
1、抽象
父类为子类提供一些属性和行为，子类根据业务需求实现具体的行为。
抽象类使用abstract进行修饰，子类要实现所有的父类抽象方法否则子类也是抽象类。
2、封装
把对象的属性和行为（方法）结合为一个独立的整体，并尽可能隐藏对象的内部实现细节；
在java中，对于对象的内部属性一般用private来实现隐藏，并通过set和get方法对外提供访问接口。
3、继承
子类继承父类的属性和行为...]]></description><category></category></item><item><title><![CDATA[Effective Java总结]]></title><link>https://blog.youkuaiyun.com/Abracadabra__/article/details/105322117</link><guid>https://blog.youkuaiyun.com/Abracadabra__/article/details/105322117</guid><author>Abracadabra__</author><pubDate>Sun, 05 Apr 2020 09:11:33 +0800</pubDate><description><![CDATA[一、创建和销毁对象
1、考虑用静态工厂方法代替构造器
静态工厂方法和设计模式中的工厂方法模式不同
静态工厂方法和构造器不同的优势在于:
(1)静态工厂方法可以自定义方法名称，而构造器的方法名称只能和类名相同。
(2)静态工厂方法不必在每次调用它们的时候都创建一个新的对象。
(3)静态工厂方法可以返回原返回类型的任何子类型的对象。
(4)静态工厂方法在创建参数化实例类型的时候，他们使代码更加简洁。
...]]></description><category></category></item><item><title><![CDATA[Java核心技术]]></title><link>https://blog.youkuaiyun.com/Abracadabra__/article/details/105319828</link><guid>https://blog.youkuaiyun.com/Abracadabra__/article/details/105319828</guid><author>Abracadabra__</author><pubDate>Sat, 04 Apr 2020 23:17:06 +0800</pubDate><description><![CDATA[回调:一种常见的程序设计模式，在这种设计模式中，可以指出某种特定事件发生时应该采取的动作。(监听)
1、在指定事件做某事；
2、在指定事件发生时做某事；
对象对于克隆很偏执，如果一个对象请求克隆，但没有实现这个接口，就会生成一个受查异常。
克隆的时候即使使用clone的默认浅拷贝方法可以实现需求，但是还是需要实现Cloneable接口，将clone重新定义为public，再调用super.clon...]]></description><category></category></item><item><title><![CDATA[JVM]]></title><link>https://blog.youkuaiyun.com/Abracadabra__/article/details/105319783</link><guid>https://blog.youkuaiyun.com/Abracadabra__/article/details/105319783</guid><author>Abracadabra__</author><pubDate>Sat, 04 Apr 2020 23:10:06 +0800</pubDate><description><![CDATA[走进JAVA
1、摆脱了硬件平台的束缚，实现了”一次编写，导出运行”的理想。
2、提供了一个相对安全的内存管理和访问机制，避免了绝大多数内存泄漏和指针越界问题。
3、实现了热点代码检测和运行时编译及优化。这使得java应用能随着运行时间的增加而获得更高的性能。
4、有一套完整的应用程序接口和许多第三方库。
不惑:不依赖书本和其他人就能得到问题的答案。
jdk=java+jvm+API=java+j...]]></description><category></category></item><item><title><![CDATA[Spring源码]]></title><link>https://blog.youkuaiyun.com/Abracadabra__/article/details/105319755</link><guid>https://blog.youkuaiyun.com/Abracadabra__/article/details/105319755</guid><author>Abracadabra__</author><pubDate>Sat, 04 Apr 2020 23:08:33 +0800</pubDate><description><![CDATA[Spring源码
Spring-Context
Spring通过应用上下文（Application Context）装载bean的定义并把它们组装起来。Spring应用上下文全权负责对象的创建和组装。Spring自带了多种应用上下文的实现，它们之间主要的区别仅仅在于如何加载配置。
Spring-Beans
spring-beans负责实现Spring框架的IOC模块
Spring-Aop
Spri...]]></description><category></category></item></channel></rss>