自定义注解在Spring中的应用 Java注解作为程序元素(类、成员变量、成员方法等)的一种元数据信息,对程序本身的执行不会产生影响。通过自定义注解,可以给程序元素添加特殊的声明。 Spring作为构建企业级应用的平台,提供了丰富的功能。将Java的自定义注解与Spring结合,在特定场景下实现注解的解析、处理,可以降低应用的耦合度,提高程序的可扩展性。
Java注解处理之反射API java.lang.reflect 包下主要包含一些实现反射功能的工具类,实际上,java.lang.reflect 包所有提供的反射API扩充了读取运行时Annotation信息的能力。当一个Annotation类型被定义为运行时的Annotation后,该注解才能是运行时可见,当class文件被装载时被保存在class文件中的Annotation才会被虚拟机读取
Java自定义注解 1. 自定义注解通过上篇文章中对注解基础知识的说明,自定义注解其实就是用Java提供的元注解声明的一种注解类型。 下面以一个定时任务注解的例子说明自定义注解的声明、使用以及处理。 1.1 自定义注解的声明下面定义了一个定时任务的自定义注解@Schedule,包含三个元素scheduleName cron desc 自定义注解时候,若给元素设置有默认值,则使用时候可不指定其值(如下例中的des
Spring Data ElasticSearch 1. 引子随着业务系统数据量的增长,MySQL单表存储保证不了读写的高效性。分库分表和历史数据迁移等解决方案就闪亮登场,但是这两种方案都存在聚合查询的问题。此时,ElasticSearch(下面简称ES)作为一种实时的全文检索引擎,能够快速的查询海量数据。将全量数据写入ES,通过查询ES,解决聚合查询的问题,同时保证查询效率。 2. ES使用方式2.1 简介Elastic
JVM每小时执行一次FULL GC问题 最近分析系统中部分机器内存使用率偏高报警问题,发现这部分机器堆内存使用率持续增长,当堆内存接近上限的时候才会触发一次FULL GC;其余机器内存使用率整体波动比较稳定,且FULL GC频率大致是1个小时。
ibatis对MySQL数据库的批量操作 对于批量操作,iBATIS提供了两种方式: 使用iterate标签,进行批量插入操作; 使用普通的SQL调用,提交时使用batch提交。下面一一介绍:1、使用iterate标签,进行批量插入操作 将需要插入的Java Object封装到一个java.util.List集合中,然后调用SQL插入。这种方式主要利用iBATIS提供的iterate标签。例子如下:
JMX连接tomcat(二)Linux篇 JMX:Java Management Extension Java 管理工具扩展本文主要说明使用jconsole工具连接Linux下的tomcat,步骤如下:
ClassLoader总结 转载自: http://www.iteye.com/topic/136427http://blog.csdn.net/lovingprince/article/details/4238695http://www.blogjava.net/lhulcn618/archive/2006/05/25/48230.html
ibatis防止sql注入 本文转载自: http://blog.csdn.net/scorpio3k/article/details/7610973 http://www.blogjava.net/cannysquirrel/archive/2010/11/26/339146.html
linux+tomcat+jdk环境下图片验证码无法显示 一、由于实际所需,在原先系统基础上需要再配置一台服务器作为业务系统,系统环境是linux+tomcat,根据原先的配置情况,将linux系统、tomcat、JDK等环境都安装配置完成,然后把应用程序部署到了tomcat中,但启动后却发现图片验证码无法显示。检查了所有配置和原服务器都是一样的,在catalina.sh中也设置 JAVA_OPTS='-Djava.awt.headless=
CXF契约优先开发方式之客户端实现(client) IDE:springsource jdk:1.7 CXF:2.7.8 maven:3.1.1代码下载路径:http://download.csdn.net/detail/liuxigiant/6937077简介 本实例是基于CXF框架实现的WebService客户端,使用maven生成客户端代码和管理依赖,集成spring框架配置客户端。
CXF契约优先开发方式 运行环境IDE:spring(支持maven) jdk:1.7 CXF:2.7.8 tomcat:6.0.26代码下载路径:http://download.csdn.net/detail/liuxigiant/6829823本例的代码和http://blog.csdn.net/liuxigiant/article/details/17732887例子中
基于web的CXF实例 运行环境:tomcat :apache-tomcat-6.0.26 CXF :apache-cxf-2.7.8IDE :springsource下面的实例是基于spring的web工程,CXF框架实现的webservice将会通过spring配置文件来发布1、新建一个web工程,导入CXF jar包到CXF官网(官网下载地址:http://cxf.apache.or
nexus 安装报错 wrapper | OpenSCManager failed - 拒绝访问。 (0x5) 解压nexus压缩包,配置好path环境变量后,在控制台(cmd)下执行nexus install命令安装nexus服务的时候报错: wrapper | OpenSCManager failed - 拒绝访问。 (0x5)这个是由于我登陆的用户是普通用户,权限不够解决方式:1、找到cmd.exe文件,右键点击 ----> 以管理员身份运行 ,然后就可以正常执行nexus
CXF简单实例 package com.service.impl;import javax.jws.WebService;import com.service.HelloService;import com.service.entity.User;@WebService(endpointInterface="com.service.HelloService")public class HelloSe
导入CXF实例中的maven项目报错 今天想学习下CXF的开发,于是上apache官网下载了一个apache-cxf-2.7.8.zip包,解压缩后在samples目录下找了找,准备导入wsdl_first_soap12项目研究下,由于这是个maven工程,于是在springsource中以maven工程方式导入这个项目,可惜导入就报错了 报错信息:ArtifactTransferException: Failure to
maven学习笔记(六)生命周期与插件 生命周期maven有三套生命周期:Clean : 在进行真正的构建之前进行一些清理工作Default : 构建的核心部分,编译,测试,打包,部署等Site :生成项目报告,站点,发布站点cleanpre-clean 执行一些需要在clean之前完成的工作clean 移除所有上一次构建生成的文件post-clean 执行一些需要在clean之后立刻完成的工作
maven学习笔记(五)nexus私服-创建hosted仓库 上篇文章中项目最终发布的release仓库和快照仓库都是nexus的默认仓库,若所有的本地开发项目版本都发布到同一个仓库,可能会造成冲突。因此,我们可以为每一个项目创建一组仓库(快照版本和release版本),比如为上篇的user项目创建一组仓库,步骤如下:1、创建仓库在页面的左边点击Repositories,主页面会显示所有的nexus仓库,点击Add按钮,选择Hosted Reposi
maven学习笔记(四)仓库、nexus私服 构件:在maven中,任何一个依赖(jar包)、插件(maven-compiler-plugin-2.5.1.jar)或者项目输出(前面例子中运行mvn clean install部署到本地仓库的jar包)都称为构件。仓库:maven在某一位置存储所有共享的构件,这个统一的位置就是仓库。仓库分类:maven仓库分为本地仓库和远程仓库本地仓库:在本地机器上缓存构件的文件目录(如前面例子中
maven学习笔记(三)pom文件 maven版本:apache-maven-3.1.11、4.0.0 pom模型的版本,对于maven2和maven2来说,值只能是4.0.02、scope 表示依赖范围,test则为测试范围依赖,compile则为编译范围依赖,若在住代码中import一个测试范围的jar包(import junit),则会编译报错。3、maven默认是连接中央仓库的,若中央仓库连接不上,可在pom文
maven学习笔记(二) 依赖 maven版本:apache-maven-3.1.1 IDE: springsource 默认支持maven集成 若使用的是eclipse,则需要先安装m2eclipse来支持maven的集成 注意: 修改IDE集成的maven版本,使用自己新安装的maven (Window->Preferences->Maven->Install
maven学习笔记(一)hello world 环境:win7 maven版本:apache-maven-3.1.1-bin.zip maven安装1、确定已经正确安装jdk,若未安装需要先安装jdk2、http://maven.apache.org/download.cgi 官网下载maven压缩包(Window下载zip包,linux下载tar.gz包),解压缩apache-maven-3.1.1-bin.zip,
用Java向数据库中插入大量数据时的优化 使用jdbc向数据库插入100000条记录,分别使用statement,PreparedStatement,及PreparedStatement+批处理3种方式进行测试: public void exec(Connection conn){ try { //开始时间 Long beginTime = System.currentTimeMillis(
深入理解Arrays.sort() 文章转载自:http://blog.csdn.net/renfufei/article/details/16359297翻译人员: 铁锚翻译日期: 2013年11月16日原文链接: Deep Understanding of Arrays.sort(T[], Comparator c)Arrays.sort(T[], Comparator c) 方法用于对象数组
java自动装箱和拆箱 java语言规范中说道:在许多情况下包装与解包装是由编译器自行完成的(在这种情况下包装成为装箱,解包装称为拆箱)基本数据类型与对象的差别 基本数据类型不是对象,也就是使用int、double、boolean等定义的变量、常量。基本数据类型没有可调用的方法。eg: int t = 1; t. 后面是没有方法滴。 Integer t =1; t.
【解惑】类与对象的初始化问题 转载自:http://hxraid.iteye.com/blog/428889 ★ 类常量 Java类常量(final修饰) 的值在编译阶段就已经写入了class文件的常量池中(可见《Class文件内容及常量池 》)。该类在JVM中运行的任何阶段都不可能改变这个常量值。这也就形成了Java常量定义的两个语法规定:(1) Java类常量必须在类中声明的时候就赋给特定的值
【解惑】 中断线程Interrupted的用处 转载自:http://hxraid.iteye.com/blog/429005 ★ 线程状态 Java虚拟机将线程运行过程分成四种状态 。 (1) New 新生;(2) Runnable 可运行;(3) Blocked 阻塞;(4) Dead 死亡。 值得注意的是: 线程的可运行状态并不代表线程一定在运行(runnable != running ) 。
shell 常用命令 查找文件,并替换制定文件中的制定字符串 在当前目录下 查找createuser.sql文件,并将该文件中的username字符串替换为当前脚本中定义的变量username的值find ./ -name createuser.sql | xargs perl -pi -e 's|username|'${username}'|g'
shell中sudo和su命令 sudo command sudo命令是以root的身份执行command命令,但是环境变量还是当前用户的,执行目录也仍然是当前目录 即环境变量和执行目录都不会切换到rootsudo command1 | command2 这种命令只会是command1有root权限,但是管道符后面的command则还是没有root权限。Sudo只会提升紧跟其后的那个命令的权限
shell脚本与Oracle交互方式 shell脚本调用oracle命令:1、直接执行Oracle命令su - oracle -c "export ORACLE_SID=${db_name}; echo \"select sysdate from dual;\" | sqlplus ${user_name}/${passwd} | grep ORA- > /tmp/checkDBs
Java多线程编程详解 转载自:http://programming.iteye.com/blog/158568 线程的同步 由于同一进程的多个线程共享同一片存储空间,在带来方便的同时,也带来了访问冲突这个严重的问题。Java语言提供了专门机制以解决这种冲突,有效避免了同一个数据对象被多个线程同时访问。由于我们可以通过 private 关键字来保证数据对象只能被方法访问,所以我们只需针对方法提出一套机
从java多线程实现“生产者-消费者”模型来谈谈操作系统中线程状态的转换及线程同步的总结 转载自:http://blog.csdn.net/fengzhe0411/article/details/6949622 前言:自己尝试着用java多线程实现了操作系统原理中讲到的“生产者-消费者”模型,在这里和大家分享一下遇到的问题和心得。我们姑且模糊“线程”和“进程”的区别,只记住它们都是可并发执行的一组过程即可。一、什么是“生产者-消费者”模型?
【解惑】 正确理解线程等待和释放(wait/notify) 转载自:http://hxraid.iteye.com/blog/559043 对于初学者来说,下面这个例子是一个非常常见的错误。Java代码 /** * 线程A: 循环50次后等待并放弃锁,让线程B执行。 */ class ThreadA extends Thread{ //线程同步的公共数据区 Object oa=nul
【解惑】Java动态绑定机制的内幕 转载自:http://hxraid.iteye.com/blog/428891 在Java方法调用的过程中,JVM是如何知道调用的是哪个类的方法源代码? 这里面到底有什么内幕呢? 这篇文章我们就将揭露JVM方法调用的静态(static binding)和动态绑定机制(auto binding)。 ★ 静态绑定机制1.//被调用的类 2.package hr.t
【解惑】Java类型间的转型 转载自:http://hxraid.iteye.com/blog/466997 ★ 基本数据类型间的转换1、Java要做到平台无关性,所有的基本数据类型所占的字节数量均是固定的。 boolean ——1/8字节(1 bit) byte —— 1字节 char —— 2字节 short —— 2字节
JVM加载class文件的原理 转载自:http://hxraid.iteye.com/blog/747625 当Java编译器编译好.class文件之后,我们需要使用JVM来运行这个class文件。那么最开始的工作就是要把字节码从磁盘输入到内存中,这个过程我们叫做【加载】。加载完成之后,我们就可以进行一系列的运行前准备工作了,比如: 为类静态变量开辟空间,将常量池存放在方法区内存中并实现常量池地址解析,初始化类
Java 虚拟机体系结构 转载自:http://hxraid.iteye.com/blog/676235 众所周知,Java源代码被编译器编译成class文件。而并不是底层操作系统可以直接执行的二进制指令(比如Windows OS的.exe文件)。因此,我们需要有一种平台可以解释class文件并运行它。而做到这一点的正是Java 虚拟机(JVM)。 实际上,JVM是一种解释执行class文件的规范技术。各个
Class文件内容及常量池 转载自:http://hxraid.iteye.com/blog/687660 当JVM运行Java程序的时候,它会加载对应的class文件,并提取class文件中的信息存放在JVM开辟出来的方法区 内存中。那么这个class文件里面到底有些什么内容呢? 一、class文件内容概述 class文件是由8bits的字节流组成,全部字节构成了15个有意义的项目。这些项目之间没
String、StringBuilder、StringBuffer 转载自:http://hxraid.iteye.com/blog/522167 作者:每次上网冲杯Java时,都能看到关于String无休无止的争论。还是觉得有必要让这个讨厌又很可爱的String美眉,赤裸裸的站在我们这些Java色狼面前了。嘿嘿....众所周知,String是由字符组成的串,在程序中使用频率很高。Java中的String是一个类,而并非基本数据类型。 不过她却不是
CentOS 5.5上安装配置oracle 11g R2 centos 5.5 32位(图形安装) 一、安装oracle 11gR2 依赖的组件包yum install binutilsyum install compat-libstdc++-33yum install elfutils-libelfyum install elfutils-libelf-develyum install gccyum install gcc-
Java 测试 JUnit 4 学习 初级篇:http://blog.csdn.net/andycpp/article/details/1327147中级篇:http://blog.csdn.net/andycpp/article/details/1327346高级篇:http://blog.csdn.net/andycpp/article/details/1329218 Junit简介: Junit最初
Java开源项目:Quartz 官方网站:http://www.opensymphony.com/quartz了解Quartz体系结构Quartz对任务调度的领域问题进行了高度的抽象,提出了调度器、任务和触发器这3个核心的概念,并在org.quartz通过接口和类对重要的这些核心概念进行描述:●Job:是一个接口,只有一个方法voidexecute(JobExecutionContextcontext),开发者实现该
java 克隆 如果希望一个类能够克隆,那么:(1) 实现Cloneable 接口(2) 覆盖clone() 需要申明为public;只覆盖方法而不实现接口,则会抛出异常CloneNotSupportedException(3) 在自己的clone()中调用super.clone()(4) 在自己的clone()中捕获违例这一系列步骤能达到最理想的效果。 java浅复制:pa
java类初始化 package com.soft.init;public class Meal { public Meal() { System.out.println("meal construct"); }}package com.soft.init;public class Lunch extends Meal { static { S
Linux中如何设置服务自启动 FAQ: Ubuntu 12.04 64bit /sbin/insserv: No such file or directory 转载连接:http://os.51cto.com/art/201301/377515.htm 有时候我们需要Linux系统在开机的时候自动加载某些脚本或系统服务,主要用三种方式进行这一操作:ln -s 在/etc/rc.d/rc*.d目录中建立/etc/init.d/服务的软链接(*代表0~6七个运行级别之一) chkonfig 命令行运行
oracle 自增长 1、在scott用户下建立表dept create table DEPT ( DEPTNO NUMBER(2) not null, DNAME VARCHAR2(14), LOC VARCHAR2(13) ) 2、建立一个sequence create sequence seq_dept minvalue 1 start with 1 inc