- 浏览: 50167 次
最新评论
文章列表
Spring MVC+Spring+Mybatis实现支付宝支付功能(图文详解)
前言
本教程详细介绍了如何使用ssm框架实现支付宝支付功能。本文章分为两大部分,分别是「支付宝测试环境代码测试」和「将支付宝支付整合到ssm框架」,详细的代码和图文解释,自己实践的时候一定仔细阅读相关文档,话不多说我们开始。
支付宝测试环境代码测试
源代码
https://github.com/OUYANGSIHAI/sihai-maven-ssm-alipay
1.下载电脑网站的官方demo:
下载:https://docs.open.alipay.com/270/106291/
SimpleDateFormatt线程不安全及解决办法
一. 为什么SimpleDateFormat不是线程安全的?
Java源码如下:
/**
* Date formats are not synchronized.
Java多线程
一.进程和线程
进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1--n个线程。(进程是资源分配的最小单位)
线程:同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换开销小。(线程是cpu调度的最小单位)
线程和进程一样分为五个阶段:创建、就绪、运行、阻塞、终止。
多进程是指操作系统能同时运行多个任务(程序)。
多线程是指在同一程序中有多个顺序流在执行
二.线程的创建
Java中线程的创建常见有如三种基本形式
1.继承Thread类,重写该类的ru ...
Java多线程分段处理List集合
- 博客分类:
- java
Java多线程分段处理List集合
解决方案:1.List集合分段
2.动态创建线程池newFixedThreadPool
3.多线程处理数据
代码如下:
public static void main(String[] args) throws Exception {
// 开始时间
long start = System.currentTimeMillis();
// 模拟数据
List List<String> list = new ArrayList<String>();
深入理解Java虚拟机(JVM)
- 博客分类:
- JVM
深入理解Java虚拟机(JVM)
1. JVM内存分区以及作用
java虚拟机主要分为以下一个区:
方法区:1. 有时候也成为永久代,在该区内很少发生垃圾回收,但是并不代表不发生GC,在这里进行的GC主要是对方法区里的常量池和对类型的卸载2. 方法区主要用来存储已被虚拟机加载的类的信息、常量、静态变量和即时编译器编译后的代码等数据。3. 该区域是被线程共享的。4. 方法区里有一个运行时常量池,用于存放静态编译产生的字面量和符号引用。该常量池具有动态性,也就是说常量并不一定是编译时确定,运行时生成的常量也会存在这个常量池中。
虚拟机栈:1. 虚拟机栈也就是我们平常所称的栈内存,它为 ...
Java泛型
1. 概述
泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)
泛型的本质是为了参数化类型(在不创建新的类型的情况下,通过泛型指定的不同类型来控制形参具体限制的类型)。也就是说在泛型使用过程中,操作的数据类型被指定为一个参数,这种参数类型可以用在类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法。
2. 举例:
List ...
Java单例模式
1. 什么是单例?
单例对象的类必须保证只有一个实例存在——这是维基百科上对单例的定义,这也可以作为对意图实现单例模式的代码进行检验的标准。
对单例的实现可以分为两大类——懒汉式和饿汉式,他 ...
Java反射教程
什么是反射?反射有什么用处?
1. 什么是反射?
“反射(Reflection)能够让运行于JVM中的程序检测和修改运行时的行为。”这个概念常常会和内省(Introspection)混淆,以下是这两个术语在Wikipedia中的解释:
内省用于在运行时检测某个对象的类型和其包含的属性;
反射用于在运行时检测和修改某个对象的结构及其行为。
从它们的定义可以看出,内省是反射的一个子集。有些语言支持内省,但并不支持反射,如C++。
内省示例:instanceof 运算符用于检测某个对象是否属于特定的类。
代理模式
代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能.这里使用到编程中的一个思想:不要随意去修改别人已经写好的代码或者方法,如果需改修改,可以通过代理的方式来扩展该方法
举个例子来说明代理的作用:假设我们想邀请一位明星,那么并不是直接连接明星,而是联系明星的经纪人,来达到同样的目的.明星就是一个目标对象,他只要负责活动中的节目,而其他琐碎的事情就交给他的代理人(经纪人)来解决.这就是代理思想在现实中的一个例子
用图表示如下:
代理模式的关键点是:代 ...
JAVA在一个循环中删除一个列表中的元素
- 博客分类:
- java
JAVA 在一个循环中删除一个列表中的元素
思考下面这一段在循环中删除多个元素的的代码
ArrayList<String> list = new ArrayList<String>(Arrays.asList("a","b","c","d"));
for(int i=0;i<list.size
JAVA读取Properties文件
- 博客分类:
- java
JAVA读取Properties文件
方式1.通过context:property-placeholder加载配置文件jdbc.properties中的内容
<context:property-placeholder location="classpath:jdbc.properties" ignore-unresolvable="true"/>
上面的配置和下面配置等价,是对下面配置的简化
<bean id="propertyConfigurer" class="org. ...
BlockQueue生产者消费者例子
- 博客分类:
- java
BlockingQueue详解
阻塞队列,顾名思义,首先它是一个队列, 常用的队列主要有以下两种: 先进先出(FIFO):先插入的队列的元素也最先出队列,类似于排队的功能。 从某种程度上来说这种队列也体现了一种公平性。 后进先出(LIFO):后插入队列的元素最先出队列,这种队列优先处理最近发生的事件。阻塞队列的核心就是生产者和消费着
html板在templates下面,js文件在static下面,在模板中引用时不需要加static这个路径。
例如:
代码中的魔鬼数字
魔鬼数字的定义:在代码中没有具体含义的数字、字符串。
魔鬼数字主要影响了代码可读性,读者看到的数字无法理解其含义,从而难以理解程序的意图。当程序中出现的魔鬼数字过多时,代码的可维护性将会急剧下降,代码变得难以修改,并容易引入错误。
例如:
修改后:
例如:
int itemCount=10; // 这可以认为不是魔鬼数字 ,但应该有注释
Spring @Value简化配置文件的读取
- 博客分类:
- Spring
Spring @Value简化配置文件的读取
1、在applicationContext.xml文件中配置properties文件
<bean id="appProperty"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<array>
<value& ...