自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(8)
  • 收藏
  • 关注

原创 AOP

AOP是Aspect Oriented Programming,即面向切面编程。在Java平台上,对于AOP的织入,有3种方式:编译期:在编译时,由编译器把切面调用编译进字节码,这种方式需要定义新的关键字并扩展编译器,AspectJ就扩展了Java编译器,使用关键字aspect来实现织入;类加载器:在目标类被装载到JVM时,通过一个特殊的类加载器,对目标类的字节码重新“增强”;运行期:目标对象和切面都是普通Java类,通过JVM的动态代理功能或者第三方库实现运行期动态织入。最简单的方式是第三种

2021-03-19 21:03:36 84

原创 IoC容器

在学习Spring之前,我们需要理解一个最核心的概念,容器。那什么是容器呢?例如,Tomcat就是一个Servlet容器,它可以为Servlet的运行提供运行环境。类似Docker这样的软件也是一个容器,它提供了必要的Linux环境以便运行一个特定的Linux进程。Spring的核心就是提供了一个IoC容器,它可以管理所有轻量级的JavaBean组件。在传统的应用程序中,控制权在程序本身,程序的控制流程完全由开发者控制,比如,一个在线书籍,通过BookService来获取书籍:public clas

2021-03-18 17:11:54 141

原创 反射

反射(Reflection),Java的反射是指程序在运行期可以拿到一个对象的所有信息。正常情况下,如果我们要调用一个对象的方法,或者访问一个对象的字段,通常会传入对象实例:public class Main { String getFullName(Person p) { return p.getFirstName() + " " + p.getLastName(); }}但是如果是这样呢?public class Main { String getFu

2021-03-17 21:02:15 115

原创 Seesion和Cookie

在Web应用程序中,当一个用户登录成功后,我们需要跟踪用户身份,在该用户访问其它页面时,需要准确识别出该用户,如何做呢?因为HTTP协议是一个无状态协议,即Web应用程序无法区分收到的两个HTTP请求是否是同一个浏览器发出的。为了跟踪用户状态,服务器可以向浏览器分配一个唯一ID,并以Cookie的形式发送到浏览器,浏览器在后续访问时总是附带此Cookie,这样,服务器就可以识别用户身份。Session我们把这种基于唯一ID识别用户身份的机制称为Session。每个用户第一次访问服务器后,会自动获得一个

2021-03-17 15:45:51 105

原创 正则表达式

正则表达式是用来匹配字符串的强有力的武器,比如如何判断有效的电话号码,一种直观的想法是通过程序判断:boolean isValidMobileNumber(String s) { // 是否是11位? if (s.length() != 11) { return false; } // 每一位都是0~9:(没有考虑首位不能为0的情况) for (int i=0; i<s.length(); i++) { char c = s.c

2021-03-16 12:11:23 151

原创 Stream

JDK8开始不但引入了Lambda表达式,还引入了一个全新的流式API:Stream API,这个Stream并不是java.io包下的InputStream和OutputStream,它代表的是任意Java对象的序列。说到Java对象的序列,第一时间想到的就是List容器,它和List也不一样,List存储的每个元素都是已经存储在内存中的某个Java对象,而Stream输出的元素可能并没有预先存储在内存中,而是实时计算出来的。Stream是惰性计算。何为惰性计算呢?如果我们要表示一个全体自然数的集合,

2021-03-15 19:11:15 466

原创 方法引用

方法引用除了使用Lambda之外,还可以直接传入方法引用:String[] array = new String[] { "Apple", "Orange", "Banana", "Lemon" };Arrays.sort(array, String::compareTo);System.out.println(String.join(", ", array));上述代码直接使用方法compareTo的引用,用String::compareTo表示。我们还可以自己写一个方法来达到排序的效果:

2021-03-15 18:12:50 131

原创 Lambda表达式

函数式编程(Functional Programming)是把函数作为基本运算单元,函数可以作为变量,可以接收函数,还可以返回函数。历史上研究函数式编程的理论是Lambda演算,所以我们经常把支持函数式编程的编码风格称为Lambda表达式。Lambda表达式在Java程序中,会经常遇到一大堆接口只定义了一个方法,也称为FunctionalInterface。当我们用Arrays.sort()排序时,可以传入一个Comparator实例,并采用匿名类的方式来实现:String[] array = ..

2021-03-15 17:37:22 93

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除