0%

Spring.png

5 AOP

5.1 什么是AOP

AOP(Aspect-Oriented Programming,面向切面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善。

OOP引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。当我们需要为分散的对象引入公共行为的时候,OOP则显得无能为力。也就是说,OOP允许你定义从上到下的关系,但并不适合定义从左到右的关系。例如日志功能。日志代码往往水平地散布在所有对象层次中,而与它所散布到的对象的核心功能毫无关系。对于其他类型的代码,如安全性、异常处理和透明的持续性也是如此。这种散布在各处的无关的代码被称为横切(cross-cutting)代码,在OOP设计中,它导致了大量代码的重复,而不利于各个模块的重用。

阅读全文 »

Spring.png

4. Bean的生命周期

4.1 Bean的生命周期

Spring中bean的生命周期是指bean创建,初始化,销毁的过程,整个过程是由容器进行管理的。

具体过程如下图所示:

Screen Shot 2020-02-05 at 8.08.12 PM.png

阅读全文 »

Spring.png

3. 高级装配Bean

3.1 Bean的作用域

默认情况下,Spring中的bean都是以单例的形式存在的,无论注入多少次,每次注入的都是同一个实例。

考虑到某些bean可能是可变的,Spring定义了不同的作用域,可以基于这些作用域创建不同的bean,

Screen Shot 2020-01-30 at 3.44.24 PM.png

单例是默认的作用域,如果选择@Scope注解选择其他作用域,这可以和@Component@Bean一起使用。

阅读全文 »

Spring.png

2. Bean的装配

Spring容器负责创建应用程序中的bean,并通过DI来协调对象之间的关系。Spring提供了三种主要的装配机制:

  • XML显式配置;
  • Java配置类进行显式配置;
  • 隐式的bean发现机制和自动装配。

推荐使用Java配置类结合隐式的自动bean扫描机制。

阅读全文 »

Spring.png

1. Spring概述

本章主要介绍Spring中的体系结构和常见概念,比如bean、控制反转(Inverse of Control,IoC)等。

1.1 体系结构

Spring 框架提供约 20 个模块,可以根据应用程序的要求来使用。

Screen Shot 2020-01-11 at 7.54.32 PM.png

阅读全文 »

JVM.jpg

6. 晚期编译优化

晚期编译优化主要是在运行时做的一些优化手段。

6.1 JIT编译器

在部分的商用虚拟机中,java程序最初是通过解释器(Interpreter) 进行解释执行的,当虚拟机发现某个方法或代码块的运行特别频繁时,就会把这些代码认定为“热点代码”(Hot Spot Code)。为了提高热点代码的执行效率,在运行时,虚拟机将会把这些代码编译成与本地平台相关的机器码,并进行各种层次的优化,完成这个过程的编译器称为即时编译器(Just In Time Compiler)

java虚拟机规范中没有规定即时编译器应该如何实现,也没有规定虚拟机必需拥有即时编译器,这部分功能完全是虚拟机具体实现相关的内容。本文中提及的编译器、即时编译器都是指HotSpot虚拟机内的即时编译器。

阅读全文 »

JVM.jpg

5. 早期编译优化

早期编译优化主要指编译期进行的优化。

java的编译期可能指的以下三种:

  1. 前端编译器:将*.java文件变成*.class文件,例如Sun的Javac、Eclipse JDT中的增量式编译器(ECJ)
  2. JIT编译器(Just In Time Compiler):将字节码变成机器码,例如HotSpot VM的C1、C2编译器
  3. AOT编译器(Ahead Of Time Compiler):直接把*.java文件编译成本地机器码,例如GNU Compiler for the Java(GCJ)、Excelsior JET
阅读全文 »

JVM.jpg

4. 编写高效Java程序

4.1 面向对象

构造器参数太多怎么办?

正常情况下,如果构造器参数过多,可能会考虑重写多个不同参数的构造函数,如下面的例子所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
public class FoodNormal {

//required
private final String foodName;//名称
private final int reilang;//热量

//optional
private final int danbz;//蛋白质
private final int dianfen;//淀粉
private final int zf;//脂肪

//全参数
public FoodNormal(String foodName, int reilang, int danbz,
int dianfen, int zf, int tang, int wss) {
super();
this.foodName = foodName;
this.reilang = reilang;
this.danbz = danbz;
this.dianfen = dianfen;
this.zf = zf;
}

//2个参数
public FoodNormal(String foodName, int reilang) {
this(foodName,reilang,0,0,0,0,0);
}

//3....6个参数
//

public static void main(String[] args) {
FoodNormal fn = new FoodNormal("food1",1200,200,0,0,300,100);
}
}
阅读全文 »

JVM.jpg

3. 虚拟机执行子系统

3.1 Java跨平台的基础

Java刚诞生的宣传口号:一次编写,到处运行(Write Once, Run Anywhere),其中字节码是构成平台无关的基石,也是语言无关性的基础。

Java虚拟机不和包括Java在内的任何语言绑定,它只与Class文件这种特定的二进制文件格式所关联,这使得任何语言的都可以使用特定的编译器将其源码编译成Class文件,从而在虚拟机上运行。

Screen Shot 2019-12-22 at 4.41.27 PM.png

阅读全文 »