自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

总结沉淀

总结日常点滴积累

  • 博客(187)
  • 资源 (3)
  • 收藏
  • 关注

原创 springMVC4(4)json与对象互转实例解析请求响应数据转换器

格式化数据输入输出Spring3.0的重要接口:HttpMessageConveter为我们提供了强大的数据转换功能,将我们的请求数据转换为一个java对象,或将java对象转化为特定格式输出等。比如我们常见的从前端注册表单获取json数据并转化为User对象,或前端获取用户信息,后端输出User对象转换为json格式传输给前端等。spring 为我们提供了众多的HttpMessageConvete

2016-04-01 21:11:59 14635

原创 springMVC4(3)方法入参灵活绑定

在原生Servlet中,我们通过在doGet和doPost方法绑定web资源访问接口:HttpServletRequest和HttpServletResponse到入参来进一步通过request.getParameter()等方法获取我们的web资源。在SpringMVC中,我们一样可以将HttpServletRequest和HttpServletResponse绑定到入参中使用,但除此之外,Spr

2016-04-01 15:57:14 4103

原创 spring引介增强定时器实例:无侵入式动态增强类功能

引介增强实例需求在前面我们已经提到了前置、后置、环绕、最终、异常等增强形式,它们的增强对象都是针对方法级别的,而引介增强,则是对类级别的增强,我们可以通过引介增强为目标类添加新的属性和方法,更为诱人的是,这些新属性或方法是可以根据我们业务逻辑需求而动态变化的。怎么来理解这一点?我们先展示一个用引介增强解决的现实需求问题,现在先来看看我们的一个需求: 我们要设计一个定时任务,在每天特定流量高峰时...

2016-04-01 14:28:30 563

原创 springMVC4(2)请求映射全面分析

在springMVC的控制器中,我们常使用@RequestMapping来完成我们的请求映射,我们可以在类定义上和方法定义上使用注解,其配置的路径将为类中定义的所有方法的父路径,如上篇实例中的/user(类)/hello(方法)。 一般的,我们类定义上的路径注解起到命名空间的作用,防止不同方法的路径映射产生冲突,比如我在UserController和ArticleController下都定义了如下

2016-04-01 12:34:39 2996

原创 springMVC请求映射全面分析

在springMVC的控制器中,我们常使用@RequestMapping来完成我们的请求映射,我们可以在类定义上和方法定义上使用注解,其配置的路径将为类中定义的所有方法的父路径,如上篇实例中的/user(类)/hello(方法)。 一般的,我们类定义上的路径注解起到命名空间的作用,防止不同方法的路径映射产生冲突,比如我在UserController和ArticleController下都定义了如...

2016-04-01 01:09:01 581

原创 springMVC4(1)角色解析与入门配置实例

在一个web项目中,典型的MVC架构将后台分为Controller、Service、DAO三层,分别实现不同的逻辑功能,下面是一个web请求过程中,我们后台的处理过程:Created with Raphaël 2.1.0模拟服务端接受web请求并返回客户端客户端controllercontrollerserviceserviceDAO/数据库DAO/数据库发送请求进行业务逻辑处理调用DAO层API访

2016-03-30 19:57:25 3342

原创 hibernate5(5)实体映射注解配置[2]主键生成策略

@GeneratedValue基本注解类型在上一篇文章中,我们讲到了JPA使用@GeneratedValue注解来定义生成策略,而关于注解生成策略有4种基本支持类型: 1. GenerationType.TABLES 当前主键的值单独保存到一个数据库的表中 2. GenerationType.SEQUENCE 利用底层数据库提供的序列生成标识符 3. GenerationType.ID

2016-03-30 12:52:12 4783

原创 hibernate5(4)实体映射注解配置[1]注解全面解析

相对于经典风格的实体配置xxx.hbm.xml,新版本hibernate使用JPA(Java Persistence API)注解配置能使我们的开发更加敏捷便利.在本系列前面部分的文章中,我们围绕JPA注解风格配置来逐步深入学习。配置实例下面先看一个实体类的配置实例:package com.zeng.model;import java.util.Date;import javax.persisten

2016-03-30 12:41:03 13538

原创 spring4整合hibernate5.1

在另一篇文章hibernate5(2)初入门配置实例中,我们针对hibernate5.1版本的崭新引导配置方法,完成了对数据库的的插入实例操作,在本节内容中,我们开始引入spring4,完成spring4与hibernate5.1的整合工作,像数据库中插入一条记录。在后面学习hibernate中,我们都会使用spring来管理我们的Bean容器。1. 导入spring4所需jar包我们推荐使用mav

2016-03-30 12:10:25 15301

原创 hibernate5(2)初入门配置实例

入门实例:向数据库插入一个对象1. 第一步需要引入我们的jar包,推荐使用maven管理项目,直接在pom.xml中添加<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <org.hibernate-version>5.1.0.Final</org.hibernate-ver

2016-03-30 01:08:05 21146 4

原创 hibernate5(1)新特性展示

在hibernate5中,有了一些新的变动: - 新引导 API - Spatial/GIS 支持 - Java 8 支持 - 扩展 AUTO id 生成支持 - 命名策略分离 - 属性转换器支持 - 更好的 “bulk id table” 支持 - 事务管理 - 模式工具链 = Session API类化 - 改进 OSGi 支持 - 改进 bytecode 增强功能 新的

2016-03-30 01:02:28 14756 3

原创 spring学习笔记(26)spring整合Quartz2持久化稳健任务调度

在《Quartz任务调度(3)存储与持久化操作配置详细解析 》一文中,我们通过配置quartz.properties属性文件实现了Quartz的数据库持久化操作。现在整合spring的原理,就是相当于把我们在属性文件中的配置属性整合进SchedulerFactoryBean中,来生成我们的Scheduler类。 这里需要特别注意的是,我们通过Bean配置生成的JobDetail和CronTrigg

2016-03-28 17:04:53 3738 2

原创 spring学习笔记(25)spring整合quartz多版本实现企业级任务调度

在我们的另一个专栏《深入浅出Quartz任务调度》详细的讲解了使用Quartz适用于从普通门户至网站企业级系统的任务调度实现方法。在下面我们结合实例来完整spring和quartz的整合工作,将我们对quartz的配置统一交给spring容器进行管理。quartz1与quartz2两个版本的差别较大,他们的具体差别可参考我的另一篇文章Quartz任务调度(1)概念例析快速入门 。鉴于我们的实际项目中

2016-03-28 16:58:21 2052 1

原创 Quartz任务调度(1)概念例析快速入门

Quartz框架需求引入在现实开发中,我们常常会遇到需要系统在特定时刻完成特定任务的需求,在《spring学习笔记(14)引介增强详解:定时器实例:无侵入式动态增强类功能》,我们通过引介增强来简单地模拟实现了一个定时器。它可能只需要我们自己维护一条线程就足以实现定时监控。但在实际开发中,我们遇到的需求会复杂很多,可能涉及多点任务调度,需要我们多线程并发协作、线程池的维护、对运行时间规则进行更细

2016-03-27 14:14:15 7043 9

原创 Quartz任务调度(6)schedulerListener分版本超详细解析

schedulerListener在我们的监听器实现类中,这个类中需实现的方法很多,不需要的可以给出空实现,下面是一些常用的用法: 方法 说明 jobScheduled() Scheduler 在有新的 JobDetail 部署时调用此方法。 jobUnscheduled() Scheduler 在有新的 JobDetail卸载时调用此方法 t

2016-03-27 14:11:47 4928 1

原创 Quartz任务调度(5)TriggerListener分版本超详细解析

TriggerListener在我们的触发器监听器中,也包含了一系列监听方法 方法 说明 getName() 定义并返回监听器的名字 triggerFired() 当与监听器相关联的 Trigger 被触发,Job 上的 execute() 方法将要被执行时,Scheduler 就调用这个方法。在全局 TriggerListener 情况下,这个方法为

2016-03-27 14:11:10 6523 4

原创 Quartz任务调度(4)JobListener分版本超详细解析

在《spring学习笔记(15)趣谈spring 事件:实现业务逻辑解耦,异步调用提升用户体验》我们通过实例分析讲解了spring的事件机制,或许你会觉得其中的配置略显繁琐,而在Quartz框架中,它为我们集成了强大的事件机制,轻松地帮助我们在任务调度中完成各类辅佐操作,高内聚而耦合。 相对spring的事件实现,quartz这边简化了许多,我们只需: 1. 自定义监听器接口实现类 2. 向

2016-03-27 14:09:41 11560 6

原创 Quartz任务调度(2)CronTrigger定制个性化调度方案

Cron表达式1. 时间字段与基本格式Cron表达式有6或7个空格分割的时间字段组成: 位置 时间域名 允许值 允许的特殊字符 1 秒 0-59 ,-*/ 2 分支 0-59 ,-*?/ 3 小时 0-23 ,-*/ 4 日期 1-31 ,-*/LWC 5 月份 1

2016-03-26 22:51:04 2882 2

原创 Quartz任务调度(3)存储与持久化操作配置详细解析

内存存储RAMJobStoreQuartz默认使用RAMJobStore,它的优点是速度。因为所有的 Scheduler 信息都保存在计算机内存中,访问这些数据随着电脑而变快。而无须访问数据库或IO等操作,但它的缺点是将 Job 和 Trigger 信息存储在内存中的。因而我们每次重启程序,Scheduler 的状态,包括 Job 和 Trigger 信息都丢失了。 Quartz 的内存 J

2016-03-26 22:06:00 13957 1

原创 spring学习笔记(24)基于注解配置事务

使用注解的方式配置事务极为便利,在xml文件上只需声明我们的注解,然后即可直接在相应service类通过标注注解来完成事务配置。相对于配置在xml文件,简洁了需要,但配置信息分散,会导致易读性大大减弱。使用步骤:1. 在spring容器中注册注解搜索器目的是使分散在各业务类中的注解得以生效 tx:annotation-driven transaction-manage

2016-03-26 14:40:32 1364 1

原创 spring学习笔记(23)基于tx/aop配置切面增强事务

在上一篇文章中,我们使用了声明式事务来配置事务,使事务配置从service逻辑处理中解耦出来。但它还存在一些缺点: 1. 我们只针对方法名的特定进行拦截,但无法利用方法签名的其它信息定位,如修饰符、返回值、方法入参、异常类型等。如果我们需要为同名不同参的同载方法配置不同事务就会出问题了。 2. 事务属性的配置串虽然能包含较多信息,但配置较易出错。针对这些问题,我们可以基于Schema,引入tx和

2016-03-26 01:34:24 5638

原创 spring学习笔记(22)声明式事务配置,readOnly无效写无异常

在上一节内容中,我们使用了编程式方法来配置事务,这样的优点是我们对每个方法的控制性很强,比如我需要用到什么事务,在什么位置如果出现异常需要回滚等,可以进行非常细粒度的配置。但在实际开发中,我们可能并不需要这样细粒度的配置。另一方面,如果我们的项目很大,service层方法很多,单独为每个方法配置事务也是一件很繁琐的事情。而且也可能会造成大量重复代码的冗杂堆积。面对这些缺点,我们首要想到的就是我们sp

2016-03-26 00:33:02 4311

原创 spring学习笔记(21)编程式事务配置,service层概念引入

编程式事务配置实例导入访问数据库事务导入在我之前的文章《spring学习笔记(19)mysql读写分离后端AOP控制实例》中模拟数据库读写分离的例子,在访问数据库时使用的方法是:public <E> E add(Object object) { return (E) getSessionFactory().openSession().save(object);}通过直接开启session而

2016-03-25 22:59:46 2629

原创 spring学习笔记(18)使用JNDI模拟访问应用服务器多数据源实例

database2在这一篇文章中,我们要用JNDI访问我们的应用服务器配置好的多数据源。在本实例中,我们使用本地的tomcat服务器来模拟远程服务器,由于本地只有mysql数据库,故通过访问不同的mysql数据库不同database来模拟同时访问不同数据库如mysql和oracle等。 下面是我们的配置步骤。 1. 在服务器配置全局数据源 1. 在我们的tomcat服务器下找到c

2016-03-25 00:24:21 2479 2

原创 spring学习笔记(19)mysql读写分离后端AOP控制实例

在这里,我们接上一篇文章,利用JNDI访问应用服务器配置的两个数据源来模拟同时操作不同的数据库如同时操作mysql和oracle等。实际上,上个例子可能用来模拟mysql数据库主从配置读写分离更贴切些。既然如此,在本例中,我们就完成读写分离的模拟在web端的配置实例。续上次的例子,关于JNDI数据源的配置和spring datasource的配置这里不再重复。下面着重加入AOP实现DAO层动态

2016-03-25 00:19:31 1435

原创 spring学习笔记(17)数据库配置[1]spring数据连接池详解

数据连接池在spring中,常使用数据库连接池来完成对数据库的连接配置,类似于线程池的定义,数据库连接池就是维护有一定数量数据库连接的一个缓冲池,一方面,能够即取即用,免去初始化的时间,另一方面,用完的数据连接会归还到连接池中,这样就免去了不必要的连接创建、销毁工作,提升了性能。当然,使用连接池,有一下几点是连接池配置所考虑到的,也属于配置连接池的优点,而这些也会我们后面的实例配置中体现: 1、

2016-03-24 22:59:31 6577 1

原创 spring学习笔记(7)AOP前夕[2]CGLib动态代理实例解析

CGLib动态代理基本原理CGLib——Code Generation Library,它是一个动态字节代码生成库,基于asm。使用CGLib时需要导入asm相关的jar包。而asm又是何方神圣? asm是一个java字节码操纵框架,它能被用来动态生成类或者增强既有类的功能。ASM 可以直接产生二进制 class 文件,也可以在类被加载入 Java 虚拟机之前动态改变类行为。Java class

2016-03-24 18:51:39 2215 2

原创 spring学习笔记(6)AOP前夕[1]jdk动态代理实例解析

JDK动态代理技术动态代理最常见应用是AOP(面向切面编程)。通过AOP,我们能够地拿到我们的程序运行到某个节点时的方法、对象、入参、返回参数,并动态地在方法调用前后新添一些新的方法逻辑,来满足我们的新需求,比如日志记录等。 动态代理常见有两种方式:基于JDK的反射技术的动态代理和基于CGLib的动态代理。使用反射技术创建动态代理JDK创建动态代理的核心是java.lang.reflect.Inv

2016-03-24 16:40:54 1452

原创 spring学习笔记(16)趣谈spring 事件机制[2]:多监听器流水线式顺序处理

上一篇我们使用到的ApplicationListener是无序的,结合异步调度它能满足了我们的大部分应用场景,但现在我们来个另类的需求,我们来模拟一条作业调度流水线,它不能异步,必须按照先后次序执行不同的任务才能得到我们的最终结果。 需求示例:现在假如华中科技大学的小白想要为它的智能机器人作品申报国家创新奖,需要经过学校、省级创新科研机构、国家创新科研机构逐层审核。我们尝试通过事件来实现,核心就在

2016-03-24 00:32:29 5637 1

原创 spring学习笔记(15)趣谈spring 事件:实现业务逻辑解耦,异步调用提升用户体验

分析需求引入事件机制使用spring的事件机制有助于对我们的项目进一步的解耦。假如现在我们面临一个需求: 我需要在用户注册成功的时候,根据用户提交的邮箱、手机号信息,向用户发送邮箱认证和手机号短信通知。传统的做法之一是在我们的UserService层注入邮件发送和短信发送的相关类,然后在完成用户注册同时,调用对应类方法完成邮件发送和短信发送 但这样做的话,会把我们邮件、短信发送的业务与我们的Us

2016-03-23 21:10:02 8534 5

原创 spring学习笔记(14)引介增强详解:定时器实例:无侵入式动态增强类功能

引介增强实例需求在前面我们已经提到了前置、后置、环绕、最终、异常等增强形式,它们的增强对象都是针对方法级别的,而引介增强,则是对类级别的增强,我们可以通过引介增强为目标类添加新的属性和方法,更为诱人的是,这些新属性或方法是可以根据我们业务逻辑需求而动态变化的。怎么来理解这一点?我们先展示一个用引介增强解决的显示需求问题,现在先来看看我们的一个需求: 我们要设计一个定时任务,在每天特定流量高峰时间

2016-03-23 13:48:15 6616 5

原创 spring学习笔记(13)基于Schema配置AOP详解

基于Schema配置入门实例除了基于@AspectJ注解的形式来实现AOP外,我们还可以在IOC容器中配置。先来看看一个常见的应用场景,在我们的web项目中,我们需要为service层配置事务,传统的做法是在每个业务逻辑方法重复下面配置中:Created with Raphaël 2.1.0程序开始 1. 获取DAO层封装好的数据库查询API(如HIbernate中的SessionFactory/S

2016-03-23 13:25:39 1613 1

原创 spring学习笔记(12)@AspectJ研磨分析[3]增强织入顺序实例详解

增强的织入顺序当一个连接点同时织入多个增强时,就存在顺序调用问题: 1. 增强在同一个切面类中定义:依照增强在切面类中定义的顺序依次织入。 2. 增强位于不同的切面,但果这些切面都实现了org.springframework.core.Ordered 接口,则由接口注解的顺序号决定,顺序号越小,对于不同的增强,织入顺序为: 1. 前置增强->越先织入 2. 后置增强->越后

2016-03-22 09:46:12 3360 1

原创 spring学习笔记(11)@AspectJ研磨分析[2]切点表达式函数详解

Spring中的AspectJ切点表达式函数切点表达式函数就像我们的GPS导航软件。通过切点表达式函数,再配合通配符和逻辑运算符的灵活运用,我们能很好定位到我们需要织入增强的连接点上。经过上面的铺垫,下面来看看Springz中支持的切点表达式函数。1. 方法切点函数 函数 入参 说明 示例 execution() 方法匹配字符串 满足某一匹配模式的的所有目标类方法连接点

2016-03-22 01:40:34 9717 2

原创 spring学习笔记(10)@AspectJ研磨分析[1]入门、注解基本介绍

@AspectJ AspectJ是一个面向切面的框架,它扩展了Java语言。AspectJ定义了AOP语法所以它有一个专门的编译器用来生成遵守Java字节编码规范的Class文件。 在使用AspectJ之前,我们需要导入aspectJ相应的jar包,可到我的资源页http://download.csdn.net/detail/qwe6112071/9468329 中下载,而如果使用mave

2016-03-21 21:21:27 1429 1

原创 Java自定义注解和元注解

自定义annotation先看一个注解实例:import java.lang.annotation.Documented;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.la

2016-03-21 19:52:48 3637

原创 Java基本注解分析,为什么要使用@Override

@Override标注在子类方法中,表示此方法是覆盖父类的重载方法,具有强制性,即如果父类没有此方法,则会编译出错。那它到底有什么用呢?让我们来看这一需求场景:假如我们利用面向对象的多态特性特性编程,有子类Sa,Sb继承自父类S.我们需要在子类Sa,Sb各自拓展父类S的speak方法,然后根据业务逻辑,通过A的引用来调用Sa,Sb的重载方法speak。示例代码如下所示:/*-----------

2016-03-21 19:04:35 3282 1

原创 spring学习笔记(9)AOP基本概念

通过上一篇文章对AOP的一些实例讲解后,我们在这篇文章中结合一些例子来系统地了解AOP中涉及到的一些基本概念。1. 增强上一篇文章我们都在讲增强,但并未谈及它的概念,但通过很多实例分析,我们很容易理解,增强就是为程序执行过程的很多特定地方添加一些新的功能。2. 连接点程序执行过程的某个特定位置点,如增强嵌入(织入)处的方法调用前,调用后、抛出异常后等程序执行点,乃至类初始化前后、类销毁前后等,都能称

2016-03-21 01:12:55 1010 1

原创 spring学习笔记(8)AOP增强(advice)配置与应用

增强类型增强(advice)主要包括如下五种类型 1. 前置增强(BeforeAdvice):在目标方法执行前实施增强 2. 后置增强(AfterReturningAdvice):在目标方法执行后实施增强 3. 环绕增强(MrthodInterceptor):在目标方法执行前后实施增强 4. 异常抛出增强(ThrowsAdvice):在目标方法抛出异常后实施增强 5. 引介增强(Intro

2016-03-20 21:14:13 5666 1

原创 mybatis3.2.6整合spring4.0和springMVC4.0开发

1. 新建项目,导入jar包在eclipse/myeclipse上新建一个web项目,导入如下图所示的jar包,关于jar包的整合资源可到http://download.csdn.net/detail/qwe6112071/9467007进行下载 如果使用了maven,则配置更为方便:<properties> <project.build.sourceEncoding>UTF-8<

2016-03-20 11:08:47 2384 1

AspectJ的JAR包

SpringAop中用到的AspectJ的Jar包,里面包括aspectjweaver.jar和aspectjrt-1.5.0.jar两个jar包

2016-03-21

mybatis反向生成model

借助数据库配置,通过此工具可方向代理生成对应的pojo类、mapper.xml文件和mapper.java接口类

2016-03-20

mybatis3+spring+springMVC4整合jar包

mybatis3+spring+springMVC4整合jar包,导入即可完美使用

2016-03-20

空空如也

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

TA关注的人

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