Spring AOP
Spring AOP(面向切面)1. 前言大家好,本小节重点介绍一个新知识 —— AOP 。作为入门的第一小节,我们需要理解 AOP 的概念,了解 AOP 的专业术语,明白它的作用。
那么,到底什么是 AOP ,它存在的意义是什么,在开发中扮演了一个什么样的角色呢?
随着疑问,开始本小节的内容。
2. 概述2.1 AOP 的概念AOP 并不是 Spring 框架的专属名称,它的全称是 Aspect Oriented Programming ,意为:面向切面编程。
它是 OOP 的一个延续,通过预编译的方式和运行期间动态代理实现程序功能的统一维护的一种技术。
名词解释:
面向切面编程:
其实切面是数学中的一个概念,表示只有一个点接触到球体的一个平面称呼为切面,而接触点称呼为切点。那么在 Spring 中,切面编程指的是什么呢?
就是在程序运行某个方法的时候,不修改原始执行代码逻辑,由程序动态地执行某些额外的功能,对原有的方法做增强,这就叫做面向切面编程。
那个被监测的执行方法,称之为切入点。
2.2 AOP 的意义我们明白了 AOP 的概念,它是一种编程设计模式,是一种编程技术,那么为 ...
Spring DI
Spring DI(依赖注入)之XML配置前言在Spring控制反转,我们详细讲解了 控制反转,也就是对 bean 做实例化的部分。而我们知道 ,Spring 的核心功能是两个:控制反转 和 依赖注入。
那么控制反转我们已经讲过,而依赖注入是什么呢?
依赖注入案例概念介绍知识回顾
对于依赖注入,我们在第一章第一节已经介绍过,我们回顾一下
概念解释
上面是我们之前对于依赖注入的一个通俗解释。那么这里再着重强调一下 IOC 控制反转与 DI 依赖注入的关系:
IOC 控制反转是将对象实例化的动作交由了 Spring 框架, 它的作用是降低了程序的耦合,不需要我们手动的创建对象,但是程序的耦合性还是存在。
对象中肯定会有一些其余对象的引用,那么这种引用就称呼为对象的依赖,而 DI 依赖注入其实 是 IOC 设计思想的一种表现形式。
对于 这种属性依赖,我们无需手动赋予,也是讲赋值的动作交给 Spring ,那么这种操作就是 依赖注入。
依赖注入方式:
第一种方式是通过 xml 配置的方式实现;
第二种方式是在属性或者方法上使用注解的方式实现。
那么,本章节先带大家体验下 xml 方式实 ...
Spring 入门
Spring 简介
前言“Spring 真的那么有用吗?”
首先 Spring 可谓是大名鼎鼎,如雷贯耳。而关于 Spring 的文章、书籍、教程更是数不胜数。可以说 Spring 贯穿我们的整个职业生涯,是框架界的常青树。那么我们这个专题专门来聊一聊: 到底 Spring 是什么,它的特点优势是什么,我们项目的开发为什么选择 Spring,它能帮助我们解决哪些问题?
带着疑问,开始我们的专题。
Spring 概述先搞清楚 Spring 的概念:官网定义:
Spring 框架为任何类型的部署平台上的基于 Java 的现代企业应用程序提供了全面的编程和配置模型。
Spring 的一个关键元素是在应用程序级别的基础架构支持:Spring 专注于企业应用程序的 “管道”,以便团队可以专注于应用程序级别的业务逻辑,而不必与特定的部署环境建立不必要的联系。
通俗解释:
简单来说:Spring 是一个免费开源框架,为了简化企业级项目开发,提供全面的开发部署解决方案。
疑问导出:
看到这儿,我们明白了一件事:Spring 是帮助我们开发项目的,使用起来很方便。
那么问题来了:Spring 为了简化项 ...
Spring IoC
Spring IoC(控制反转)前言通过Spring入门,我们已经可以使用 Spring 框架实现对自定义的 Java 对象管理,由 Spring 框架加载对象,实例化对象,放入容器。其实这就是 Spirng 的核心功能之 IoC,那么什么是 IoC 呢?什么又是容器呢?
什么是 IoC?来自百度百科的解释 —— 控制反转(IoC):(Inversion of Control,缩写为 IoC),是面向对象编程中的一种设计原则,可以用来降低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称 DI),还有一种方式叫 “依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。
通俗解释
如何理解好 IoC 呢?上一个小节中,我们使用简单的语言对它做了一个描述 —— IoC 是一种设计模式。将实例化对象的控制权,由手动的 new 变成了 Spring 框架通过反射机制实例化。
那我们来深入分析一下为什么使用 IoC 做控制 ...
Spring MVC
Spring MVC 简介Spring MVC 是 Spring Framework 提供的 Web 组件,全称是 Spring Web MVC,是目前主流的实现MVC 设计模式的框架,提供前端路由映射、视图解析等功能。
Spring MVC 功能MVC:Controller(控制层)、Model(模型层)、View(视图层)
流程:Controller 接收客户端请求,调用相关业务层组件产出 Model,或业务数据并返回给Controller,Controller 再结合 View 完成业务数据的视图层渲染,并将结果响应给客户端,如下图所示:
Spring MVC 对这套 MVC 流程进行封装,帮助开发者屏蔽底层代码,并且开放出相关接口供开发者调用,让 MVC 开发变得更加简单方便。
Spring MVC 实现原理核心组件
DispatcherServlet:前置控制器,负责调度其他组件的执行,可以降低不同组件之间的耦合性,是整个 Spring MVC 的核心模块。
Handler:处理器,完成具体的业务逻辑,相当于 Servlet。
HandlerMapping:Dispatc ...
Java并发 原理篇
Java内存模型基础知识并发编程模型的两个关键问题
线程间如何通信?即:线程之间以何种机制来交换信息
线程间如何同步?即:线程以何种机制来控制不同线程间操作发生的相对顺序
有两种并发模型可以解决这两个问题:
消息传递并发模型
共享内存并发模型
这两种模型之间的区别如下表所示:
在Java中,使用的是共享内存并发模型。
Java内存模型的抽象结构运行时内存的划分先谈一下运行时数据区,下面这张图相信大家一点都不陌生:
对于每一个线程来说,栈都是私有的,而堆是共有的。
也就是说在栈中的变量(局部变量、方法定义参数、异常处理器参数)不会在线程之间共享,也就不会有内存可见性(下文会说到)的问题,也不受内存模型的影响。而在堆中的变量是共享的,本文称为共享变量。
所以,内存可见性是针对的共享变量。
既然堆是共享的,为什么在堆中会有内存不可见问题?这是因为现代计算机为了高效,往往会在高速缓存区中缓存共享变量,因为cpu访问缓存区比访问内存要快得多。
线程之间的共享变量存在主内存中,每个线程都有一个私有的本地内存,存储了该线程以读、写共享变量的副本。本地内存是Java内存模型的一个抽象概念, ...
Java并发 基础篇
进程与线程的基本概念进程产生的背景最初的计算机只能接受一些特定的指令,用户每输入一个指令,计算机就做出一个操作。当用户在思考或者输入时,计算机就在等待。这样效率非常低下,在很多时候,计算机都处在等待状态。
批处理操作系统
后来有了批处理操作系统,把一系列需要操作的指令写下来,形成一个清单,一次性交给计算机。用户将多个需要执行的程序写在磁带上,然后交由计算机去读取并逐个执行这些程序,并将输出结果写在另一个磁带上。
批处理操作系统在一定程度上提高了计算机的效率,但是由于批处理操作系统的指令运行方式仍然是串行的,内存中始终只有一个程序在运行,后面的程序需要等待前面的程序执行完成后才能开始执行,而前面的程序有时会由于I/O操作、网络等原因阻塞,所以批处理操作效率也不高。
进程的提出
人们对于计算机的性能要求越来越高,现有的批处理操作系统并不能满足人们的需求,而批处理操作系统的瓶颈在于内存中只存在一个程序,那么内存中能不能存在多个程序呢?这是人们亟待解决的问题。
于是,科学家们提出了进程的概念。
进程就是应用程序在内存中分配的空间,也就是正在运行的程序,各个进程之间互不干扰。同时进程保存着程序每 ...
Java并发 JDK工具篇
线程池原理为什么要使用线程池使用线程池主要有以下三个原因:
创建/销毁线程需要消耗系统资源,线程池可以复用已创建的线程。
控制并发的数量。并发数量过多,可能会导致资源消耗过多,从而造成服务器崩溃。(主要原因)
可以对线程做统一管理。
线程池的原理Java中的线程池顶层接口是Executor接口,ThreadPoolExecutor是这个接口的实现类。
我们先看看ThreadPoolExecutor类。
ThreadPoolExecutor提供的构造方法一共有四个构造方法:
12345678910111213141516171819202122232425262728293031// 五个参数的构造函数public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, ...
Java基础知识
Java体系Java 基础1、跨平台2、面向对象编程语言3、分布式计算
Java 的运行机制
编程 Java 程序
编译 Java 文件
JVM 读取字节码文件运行程序
Java的三大体系
Java SE(J2SE)
Java ME(J2ME)
Java EE(J2EE)
配置 Java 环境JRE、JDKJRE:Java Runtime Environment Java 运行环境JDK:Java Devlopment Kit Java 开发工具包
开发
编译
1javac HelloWorld.java
运行
1java HelloWorld
Java IDENetBeans、Eclipse、IDEA
代码规范
强制性代码规范,必须执行的
1、Java 程序的文件名与类名必须一致,若不一致,无法通过编译。2、main 方法是程序的入口,方法的定义必须严格按照格式书写。3、类是组织 Java 代码结构的,类中的方法是执行具体业务的。
非强制性代码规范,建议按照此方式编写代码
1、一行只写一条语句。2、在 1 的基础上,还要注意代码缩进。
基本概念安装 Java 环境 ...