随笔分类 - 【阿肥的架构师之路】
摘要:一、概念和准备工作 什么是JdbcTemplate Jdbc:Java操作数据库的一套规范 JdbcTemplate:Spring框架对JDBC进行封装,使用jdbcTemplate方便实现对数据库操作 准备工作 第一步 引入jar包 第二步 配置连接池 第三步 配置JdbcTemplate对象,注
阅读全文
摘要:一、准备工作 什么是AspectJ AspectJ:不是Spring的组成部分,是独立的AOP框架,我们一般把AspectJ和Spring框架进行整合一起使用,实现面向切面编程。 实现方式: 基于XML方式配置 基于注解方式(常用) 在项目中引入AOP相关的依赖 切入点表达式 作用:知道对哪个类里面
阅读全文
摘要:一、AOP的基本概念 什么是AOP 定义:面向切面(方面)编程,利用AOP可以对业务逻辑的各个部分进行隔离,从而使得其之间耦合度降低,提高程序可重用性,同时提高了开发效率。 通俗描述:不修改源代码方式,在主干功能里添加新的功能。 底层原理 AOP的底层原理使用的是动态代理。 两种情况 有接口的情况:
阅读全文
摘要:一、创建对象 什么是注解? 定义:注解是代码特殊标记 格式:@注解名称(属性名称=属性值,属性名称=属性值) 作用域:类、方法、属性 目的:简化XML配置 Spring针对Bean管理中用于创建对象的注解 @Component :常用于公共组件 @Service :常用于Service层的实现类 @
阅读全文
摘要:一、Bean的自动装配 定义:根据指定装配规则(属性名称或属性类型),Spring自动将匹配的属性值进行注入。 常规注入 根据类型注入【byType】 根据名称注入【byName】 二、IOC引用外部属性文件 演示场景 配置数据库连接池【德鲁伊druid.jar】 直接配置【方案A】 引入外部属性文
阅读全文
摘要:一、Bean的作用域 定义:在Spring里设置创建的Bean是多实例还是单实例。 默认:单实例 单实例【默认】 多实例 小结 singleton 单实例,加载配置文件的时候就会创建出实例对象。 prototype 多实例,在调用getBean方法时才创建出实例对象。 二、Bean的生命周期 定义:
阅读全文
摘要:一、Spring的Bean的类型 两种类型: 普通Bean 工厂Bean 区别: 普通Bean:在配置文件中定义的Bean类型就是返回类型 工厂Bean:在配置文件中定义的Bean类型可以和返回类型不一样 作用: 它是一个Bean,但又不仅仅是一个Bean。 它是一个能生产或修饰对象生成的工厂Bea
阅读全文
摘要:一、注入空值和特殊符号 null值 特殊符号 二、注入外部Bean 1、创建两个类Service类和Dao类 2、在Service调用Dao里面的方法 3、在Spring配置文件中进行配置 三、注入内部Bean和级联赋值 背景 一对多的关系:一个分类下可以拥有很多本书,一本书归属于一个特定的分类下。
阅读全文
摘要:一、IOC操作Bean管理(概念) Bean管理指的是2个操作: Spring创建对象 Spring注入属性 Bean管理操作有2种方式: (1)基于XML配置文件方式实现 (2)基于注解方式实现 二、IOC操作Bean管理(基于XML方式) 基于XML方式创建对象 (1)在Spring配置文件中,
阅读全文
摘要:一、IOC(概念和原理) 什么是IOC (1)控制反转,把对象创建和对象之间的调用过程,交给Spring进行管理 (2)使用IOC目的:为了耦合度降低 (3)第一天的入门案例就是IOC的实现 IOC底层原理 XML解析 工厂模式 反射 画图讲解IOC底层原理 原始方式 工厂模式 IOC 二、IOC(
阅读全文
摘要:一、Spring框架概述 定义:Spring5框架是一个轻量级开源的JavaEE框架,是针对bean的生命周期进行管理的轻量级容器。 目的:解决企业应用开发的复杂性 核心部分:IOC和AOP (1)IOC:控制反转,把创建对象的过程交给 Spring 进行管理 (2)AOP:面向切面,不修改源代码进
阅读全文
摘要:一、并发队列的有界和无界 并发队列:实际上就是在并发场景下使用的队列。 有/无界概念:有界,就是规定了队列的大小,比如初始值给定位16。无界不是真的无界,是整形的最大值,这个值是达不到的(因为内存不够),所以通常称为无界 有界队列 常见的有界队列 ArrayBlockingQueue :基于数组实现
阅读全文
摘要:一、前言 原子类主要用于并发编程里操作原子数据时使用到,位于util.concurrent.atomic包下。 我们可以通过下图看到,在JDK中已经定义了很多个原子类: 我们可以根据其功能把常用的一些原子类进行分类: 原子更新基本数据类型: AtomicBoolean :原子更新布尔类型 Atomi
阅读全文
摘要:文章更新时间:2021/09/03 一、引言 线程并发的过程中,肯定会涉及到一个变量共享的概念,那么我们在多线程运行过程中,怎么保证每个先拿获取的变量信息都是最新且有序的呢?这一篇我们来专门学习一下Lock锁。 我们先来了解几个概念: 乐观锁与悲观锁 悲观锁: 假定会发生并发冲突,即共享资源会被某个
阅读全文
摘要:文章更新时间:2021/07/10 一、初认volatile 首先学习volatile关键字时,我们先简单的了解一下它能干啥: 工作内存与主内存同步延迟现象导致的可见性问题: 可通过synchronized或volatile关键字解决,他们都可以使一个线程修改后的变量立即对其它线程可见 对于指令重排
阅读全文
摘要:文章更新时间:2021/07/08 一、数据依赖性 在学习JVM的指令重排序之前,我们先了解一下什么是数据依赖性: 编译器和处理器在处理具体的指令时,可能会对操作进行重排序来提高执行性能【多条指令并行执行,所以提升性能的同时也可能会导致指令乱序】;而上面3种情况,只要重排序两个操作的执行顺序,程序的
阅读全文
摘要:文章更新时间:2021/07/10 一、什么是JMM 概念:Java内存模型是一种抽象的概念,并不真实存在,定义了Java程序在各种平台下对内存访问的机制及规范。 PS:线程是程序运行的载体 图示: 解析:首先我们要明确一点:内存模型主要是影响线程共享的内存可见性问题,Java线程之间的通信由Jav
阅读全文
摘要:文章更新时间:2021/08/23 一、一句话背景 比如目前我需要实现一个功能,根据我输入的参数来获取具体的游戏角色对象,而游戏角色的组成是很繁杂的,这种情况我们就可以考虑使用建造者模式来开发这一个功能。 二、使用场景 使用场景:获取一个复杂对象,同时对象的内部组合逻辑多变的场景。 如:组合搭配出产
阅读全文
摘要:文章更新时间:2021/09/06 一、引言 Thread类中存在着许多操作线程的方法,学习Thread类是非常有必要的,前面我们也嘘唏了创建线程的几种方式,若线程的创建不是以继承Thread类的方式创建的,那我们又改如何使用Thread中的方法呢?下面一起来学习一下多线程操作的重点--Thread
阅读全文
摘要:一、线程池的分类 线程池的创建都是通过Executors(创建者接口)这个接口的方法进行创建的,下面我们来了解一下都有哪些线程池: newFixedThreadPool() : 创建一个固定线程的线程池 newCachedThreadPool() : 创建一个可扩展的线程池。 newSchedule
阅读全文