摘要:
内部静态类在使用时才会被加载。 public class InnerStaticSingleton { static { System.out.println("2222"); } private static class SingletonFactory{ static { System.out. 阅读全文
摘要:
阅读全文
摘要:
volatile可以保证可见性和有序性,具体分析见https://www.cnblogs.com/BonnieWss/p/12198101.html 场景1:原子操作 int a=0;//语句1int b=0;//语句2volatile int c=0;//语句3int d=0;//语句4int e 阅读全文
摘要:
并发编程的三大特性 1、原子性 对于成员变量a来说,如果线程A执行以下操作: a++; 此时需要分三步执行: (1)读取a的值 (2)将a的值加1 (3)将加1后的值赋给a 在执行以上三步过程中,如果另一个线程B对a进行了操作,那么就不能保证原子性了。 要保证原子性,可以加锁,如synchroniz 阅读全文
摘要:
MyBatis 手写MyBatis流程 架构流程图 封装数据 封装到Configuration中 1、封装全局配置文件,包含数据库连接信息和mappers信息 2、封装 mapper.xml映射文件 封装操作:Builder类 Builder类用来操作配置文件(全局配置文件和mapper映射文件), 阅读全文
摘要:
1、适配器模式 /** * 目标抽象类:定义客户所需接口 */ public interface Target { void m1(); void m2(); } /**适配器模式: * 适用场景:(1)系统需要使用一些现有的类,而这些类的接口不符合系统的需要,甚至没有这些类的源代码 * (2)想创 阅读全文
摘要:
1、简单工厂模式 /** * 简单工厂类: * 优点:简单工厂类实现了对象创建和使用的分离,客户端可以免除直接创建产品对象的职责 * 缺点:当引入新产品时,需要修改静态方法,通过传入不同的参数创建不同的产品,需要修改工程类,违背“开闭原则” */ public class Factory { pub 阅读全文
摘要:
1、观察者模式: /** * 抽象观察目标 */ public abstract class Subject { protected ArrayList<Observer> observers=new ArrayList<>();//定义一个观察者集合用于存储所有观察对象 //注册方法,用于向观察者 阅读全文
摘要:
1、mybatis提供了SqlSession接口,用来执行sql,进行增删改查。SqlSession由factory获得。 SqlSession sqlSession= sqlSessionFactory.openSession(); 2、mybatis通过mapper动态代理的方式,负责生成sql 阅读全文
摘要:
获取properties文件的内容 public void test() throws Exception{ String resource = "application.properties";//resources文件夹中配置文件的路径 InputStream inputStream = thi 阅读全文