- 博客(193)
- 资源 (1)
- 收藏
- 关注
原创 Spring的组件扫描
Spring2.0以后的版本中,引入了基于注解(Annotation)的配置。注解是JDK1.5的一个新特性。XML配置灵活。注解和XML可以配合使用。 [b]1. Spring的注解支持:[/b] 在spring的配置文件中引入context的Schema命名空间,并添加注解配置标签: [code="xml"] [/co...
2017-09-16 21:58:30
271
原创 ActiveMQ死信队列
Apache的ActiveMQ是JMS的一个开源实现,下面来说说ActiveMQ的使用 1. admin的web管理 浏览器输入http://localhost:8161/,打开后台管理页面: 2. DLQ - 死信队列 (Dead Letter Queue) 用来保存处理失败或者过期的消息。 出现下面情况时,消息会被重发: i. 事务会话被回滚。 ii. 事...
2017-07-03 10:21:02
768
原创 AtomicReferenceFieldUpdater 使用
[b]AtomicReferenceFieldUpdater[/b]位于[b]java.util.concurrent.atomic[/b]包中,作用是[color=red]原子性地更新对象属性[/color]。 以原子性更新Cat类的name属性为例: name属性需要保持[color=red]可见性[/color],且[color=red]不是私有变量[/color]。 [cod...
2014-11-19 22:13:43
334
原创 Struts2系列之三:注解式Action
struts2是的配置文件是struts.xml,可以将Action的URL映射和结果放在该文件中,也可以通过Convention Plugin支持注解方式来配置URL映射和结果。 使用时需要把Convention Plugin添加到classpath中;如果是maven工程则添加依赖: [code="xml"] org.apache.struts struts2-c...
2014-10-08 23:18:57
305
原创 Netty系列之一:回显服务端和客户端
Netty是一款基于Java NIO的框架,能够建立通道、 处理事件、编解码和异常处理等,为上层应用提供了清晰、简洁的开发接口:减少用户的编码和错误,使应用开发者能够把注意力集中在业务逻辑上。 下面以回显功能为例: [size=medium][color=brown]一、服务端:[/color][/size] [size=medium]1. 实例化引导类[/size] 抽...
2014-09-02 22:26:10
401
原创 Java正则表达式实例
[size=medium]题目[/size]: 有两个文件context.txt和words.conf,请尝试将他们合并成为一段文字,并打印出来。 [size=medium]文件内容[/size]: [b]context.txt[/b] [color=blue]“并不是每个人都需要$(qunar)自己的粮食,$(flight.1)每个人都需要做自己穿的$(fligh...
2014-08-25 22:50:16
137
原创 AtomicInteger 使用
Java中,i++和++i都不是原子操作,多线程环境下需要使用synchronized关键字。JDK1.5的java.util.concurrent.atomic包提供了原子操作类,通过Unsafe类调native方法来实现。 这里以AtomicInteger为例: [b]内部存储[/b] 维护了一个整型值,其初始值为0。考虑到多线程操作,使用volatile来保证其可见...
2014-08-02 22:57:39
265
原创 本地事务系列之五:使用Transactional注解
AOP的配置稍显复杂,通过[color=red]@Transactional[/color]注解,同样可以实现: 1. 在需要事务的类或方法上加[color=red]@Transactional[/color]: 如果是类上加注解,该类的所有public方法都会应用事务 如果是方法上加注解,该方法会应用事务。 在接口上加注解有风险,如果使用CGLIB(类代理)将不...
2014-08-02 18:16:57
358
原创 本地事务系列之四:使用AOP
Spring AOP通过在文件中配置来管理事务,好处是对代码侵入性小。 Spring AOP使用AspectJ表达式来定义切点,所以pom文件加入: [code="xml"] org.aspectj aspectjweaver 1.7.0 [/code] FruitShop实现: 方法中除了使用继承自JdbcDaoSupport的Jdbc...
2014-08-02 17:08:19
143
原创 本地事务系列之三:使用TransactionTemplate
TransactionTemplate的灵活性好,可以给代码块加事务处理,而不是方法粒度的控制。 FruitShop实现: [code="java"] public class TxTemplateJdbcFruitShop extends JdbcDaoSupport implements FruitShop { private PlatformTransactionManager...
2014-07-17 22:15:33
650
原创 本地事务系列之二:使用PlatformTransactionManager
Spring的事务管理器接口: [code="java"] public interface PlatformTransactionManager { TransactionStatus getTransaction(TransactionDefinition definition) throws TransactionException; // 获取事务状态 void com...
2014-07-17 21:37:07
1055
原创 本地事务系列之一:JDBC操作
本地事务即对一个数据源进行操作。大多数数据库支持事务。 先看没有事务的时候,导致的数据不一致问题。 准备数据: [code="sql"] -- MySQL -- Create the database DROP DATABASE IF EXISTS spring; CREATE DATABASE spring -- Drop three tables if exist ...
2014-07-08 23:04:31
139
原创 MySQL 触发器
触发器的作用是在增、删、改操作之前(或之后)自动调用的SQL语句或存储过程。比如为了保持数据的一致性,删除订单记录时,触发删除订单详细记录。 [size=medium]1. 创建触发器:[/size] [code="sql"] DELIMITER $$ -- 结束符改为$$ CREATE TRIGGER trigger_name BEFORE|AFTER INSERT|...
2014-06-30 21:35:09
137
原创 SQL CASE WHEN实例
有三张表: 学生表student(stu_id, name) 成绩表scores(stu_id, subject, score) 补考成绩表(stu_id, subject, score) 其中: stu_id:ID name:姓名 subject:课程 ...
2014-05-22 22:21:03
141
原创 JVM 四种引用
[size=medium]1. 强引用[/size] 指通过普通方式创建一个对象,并把这个对象赋给一个引用变量。只要还有引用变量指向,就不会被JVM回收,即使在内存不足时。 [size=medium]2. 软引用[/size] 通过SoftReference实现。 和强引用类似,区别是当内存不足时会被JVM回收。 [code="java"] public sta...
2014-04-24 19:56:09
143
原创 PushbackInputStream 源码分析
扩展java.io.FilterInputStream,代表的是可放回输入流。用于根据特定字符来判断流类型或编码等。 [size=medium]1. 内部存储:[/size] [code="java"] protected byte[] buf; // 缓冲区,从底层流获取数据 protected int pos; // 下一个要读取字节的位置 protected vol...
2014-04-19 12:04:46
171
原创 NIO UDP 编程
和TCP的SocketChannel类似,UDP的[color=red]DatagramChannel[/color]能充分利用NIO的优势。 服务端:Selector, [color=red]DatagramChannel[/color], ByteBuffer 客户端:[color=red]DatagramChannel[/color], ByteBuffer 区别: ...
2014-04-17 23:18:09
257
原创 Kafka 安装和测试
[size=medium]1. 简介[/size] kafka (官网地址:[url]http://kafka.apache.org[/url])是一款分布式消息发布和订阅的系统,具有高性能和高吞吐率。 [img]http://dl2.iteye.com/upload/attachment/0096/1014/758475a7-1c1b-3c60-a753-c04a6debec0d.j...
2014-04-15 10:31:04
489
原创 Spring AOP系列之五:后置通知
和前置通知类似, 通过实现[color=red]org.springframework.aop.AfterReturningAdvice[/color]来完成后置通知: [code="java"] public class CarAfterAdvice implements AfterReturningAdvice { @Override // returnValue 方法返...
2014-04-14 08:59:58
170
原创 Spring AOP系列之四:前置通知
通过实现[color=red]org.springframework.aop.MethodBeforeAdvice[/color]来完成前置通知: [code="java"] public class CarBeforeAdvice implements MethodBeforeAdvice { @Override // method 目标类方法,args 方...
2014-04-13 21:28:21
144
原创 Spring AOP系列之三:环绕代理
通过实现[color=red]org.aopalliance.intercept.MethodInterceptor[/color]接口来实现环绕通知: [code="java"] public class CarAroundProxy implements MethodInterceptor { @Override public Object invoke(MethodInv...
2014-04-13 18:20:29
139
原创 Spring AOP系列之二:Java代理
通过Java代理的方式: 汽车的代理,需要实现[color=red]java.lang.reflect.InvocationHandler[/color]接口 [code="java"] public class CarJavaProxy implements InvocationHandler { private Object car; public void setCar...
2014-04-13 18:00:53
111
原创 Spring AOP系列之一:手动方式
AOP (Aspect Oriented Programming)面向切面编程,是对OOP (Object Oriented Programming)面向对象编程很好的补充,可以在不改变原始目标原型的情况下,动态地添加通用逻辑,完成业务逻辑和通用处理分离,实现解耦和利于扩展。 首先看下手动方式,没有使用AOP代理: 车辆接口: [code="java"] public in...
2014-04-13 17:44:05
105
原创 Eclipse TCP/IP Monitor 的使用
Eclipse自带的TCP/IP Monitor为我们检查请求和响应提供了方便。 正常情况下,请求和响应走的流程是: i. 客户端 ----> 请求包 ----> 服务端:端口号 ii. 服务端:端口号 ----> 响应包 ---> 客户端 经过Monitor拦截后,变成: i. 客户端 ----> 请求包 ----> TCP监视器:端口号 ii. TC...
2014-04-13 17:03:07
198
原创 BeanCopier系列之三:缓存BeanCopier提升性能
[url=http://czj4451.iteye.com/blog/1998750]BeanCopier系列之一:特性测试[/url] [url=http://czj4451.iteye.com/blog/2044101]BeanCopier系列之二:使用Converter[/url] BeanCopier拷贝速度快,性能瓶颈出现在创建BeanCopier实例的过程中。 所以,...
2014-04-12 18:14:13
406
原创 BeanCopier系列之二:使用Converter
[url=http://czj4451.iteye.com/blog/1998750]BeanCopier系列之一:特性测试[/url] [url=http://czj4451.iteye.com/blog/2044150]BeanCopier系列之三:缓存BeanCopier提升性能[/url] 当源和目标类的属性类型不同时,不能拷贝该属性,此时我们可以通过实现Converter...
2014-04-12 17:36:30
387
原创 BeanCopier系列之一:特性测试
[url=http://czj4451.iteye.com/blog/2044101]BeanCopier系列之二:使用Converter[/url] [url=http://czj4451.iteye.com/blog/2044150]BeanCopier系列之三:缓存BeanCopier提升性能[/url] cglib是一款比较底层的操作java字节码的框架。 下面通过拷贝b...
2014-04-12 15:15:35
162
原创 NIO Socket 编程
Java NIO (Nonblocking IO)解决了常规IO的瓶颈: a. 服务端的监听操作会阻塞而无法处理其它事务。多线程方式受到线程池和系统资源的限制,同步操作将会变得复杂。多线程操作磁盘将会导致响应慢甚至死锁。 b. 普通I/O通过Stream来操作,开发简单,但是对I/O的控制力弱 c. 普通IO的读取或写入会在JVM内存和操作系统内存之间进行复制,开销较大。 ...
2014-04-11 22:48:32
172
原创 Linux安装JDK
[size=medium]1. 下载[/size] [url]http://www.oracle.com/technetwork/java/javase/downloads/index.html[/url] [img]http://dl2.iteye.com/upload/attachment/0095/8744/f0405064-4c6b-35ec-9a22-4fca077aa9cb...
2014-04-08 23:04:56
96
原创 myBatis系列之七:事务管理
[url=http://czj4451.iteye.com/blog/1976365]myBatis系列之一:搭建开发环境[/url] [url=http://czj4451.iteye.com/blog/1980569]myBatis系列之二:以接口方式交互数据[/url] [url=http://czj4451.iteye.com/blog/1982653]myBatis系列之三:增删改查...
2014-04-01 15:36:13
375
原创 Maven scope 类型
[size=medium]1. compile[/size] [b]编译[/b]范围。默认scope。 在工程编译(classpath)和打包时(如war, ear等,会包含该jar文件)有效。 [size=medium]2. runtime[/size] [b]运行时[/b]范围,用于运行和测试。 编译代码时不需要该jar包,打war包时会被包含到其中,供容器动...
2014-03-26 22:21:55
169
原创 常用正则表达式
1. 日期 [code="js"] function valiDate(time) { regex = /^\d{4}-(0?[1-9]|1[0-2])-(0?[1-9]|[1-2]\d|3[0-1]) ([0-1]\d|2[0-3]):[0-5]\d:[0-5]\d$/; if (!regex.test(time)) { alert('时间格式不正确:需为yyyy-MM-dd ...
2014-03-19 09:58:23
120
原创 卡片扔掉奇数位 算法
有N张卡片,标号为从1到N。第一轮抽取到奇数位时,将卡片扔掉,偶数位保留;第二轮扔掉剩下来的奇数位。以此类推,最后剩下的卡片标号为? [size=medium]1. 列表实现[/size] [code="java"] private static int retrieveLastViaList(int n) { LinkedList list = new LinkedList...
2014-03-15 18:03:37
206
原创 Ubuntu上安装Redis
[size=medium]1. 安装make, gcc和python-dev[/size] make, gcc是Redis的编译工具,python作为Redis的客户端语言 [code="shell"] sudo apt-get update sudo apt-get install make gcc python-dev [/code] 如果安装过程中出现依赖问题,可以使...
2014-02-28 00:06:31
101
原创 hessian系列之三:与Spring集成
Spring封装了hessian客户端和服务端的通用代码,把实现者和调用者作为bean放到spring容器中管理,简化了开发。 实际生产情况,接口项目里面只定义接口,分别为服务端项目和客户端项目所引用: [size=medium]1. 接口项目:[/size] pom.xml文件: [code="xml"] com.john.spring hessian-intf 1.0...
2014-02-17 20:21:42
289
原创 hessian系列之二:上传文件
hessian较早版本通过 byte[] 进行文件传输;4.0之后支持 InputStream 作为参数或返回值进行传输。 注意:hessian会读取整个文件,如果文件过大,会导致JVM内存溢出。可以通过控制上传文件的大小,设置合理的JVM参数,以及采用随机读取方式来解决。 [size=medium]1. 接口:[/size] 一般放在独立的工程中,供服务端和客户端引用 ...
2014-02-17 17:16:15
163
原创 hessian系列之一:Hello world
Hessian是一个Web Service的轻量级二进制协议,使用起来比较简单。 随着信息技术的发展,不同语言或平台系统之间的交互越来越多,普通Web Service使用起来会比较复杂,Hessian相对简单。 下面介绍下使用Hessian实现异构系统之间的数据交互: Hessian构建服务和客户端一般需要如下四个步骤: 1. 定义接口API 2. 服务端实现-实现接口 ...
2014-01-06 20:51:28
124
原创 MD5生成消息摘要
[code="java"] public class MD5Util { private static final String MD5 = "MD5"; private static final int THIRTY_TWO = 32; private static final int SHIFT = 4; ...
2013-12-28 16:08:48
371
原创 myBatis系列之六:与SpringMVC集成
[url=http://czj4451.iteye.com/blog/1976365]myBatis系列之一:搭建开发环境[/url] [url=http://czj4451.iteye.com/blog/1980569]myBatis系列之二:以接口方式交互数据[/url] [url=http://czj4451.iteye.com/blog/1982653]myBatis系列之三:增删改查...
2013-12-26 13:33:11
111
原创 SpringMVC系列之三:集成Log4j
[url=http://czj4451.iteye.com/blog/1958594]SpringMVC系列之一、集成JSP[/url] [url=http://czj4451.iteye.com/blog/1958909]SpringMVC系列之二、集成FreeMarker[/url] SpringMVC系列之三、集成Log4j 在[url=http://czj4451.iteye.c...
2013-12-20 15:42:06
161
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人