- 博客(204)
- 资源 (42)
- 收藏
- 关注
原创 java 动态代理高级
从JDK1.3以后,java引入动态代理机制,即对目标对象的方法调用是通过代理对象来完成的,java的动态代理只能针对接口进行动态代理,即要实现动态代理的类必须实现接口,CGLIB提供了针对类的动态代理功能。JDK动态代理的例子如下://代理接口 package com.proxy.test;interface IProxy{ public void hello(Strin
2012-09-02 15:48:03 3496 2
原创 《深入理解java虚拟机》学习笔记8——Tomcat类加载器体系结构
Tomcat 等主流Web服务器为了实现下面的基本功能,都实现了不止一个自定义的类加载器:(1).部署在同一个服务器上的两个web应用程序所使用的java类库可以相互隔离。(2).部署在同一个服务器上的两个web应用程序所使用的java类库可以相互共享。(3).许多Web服务器本身使用java语言实现,因此服务器所使用的类库应与应用程序的类库相互独立。(4).支持JSP应用的Web
2012-09-02 14:56:38 4806
原创 《深入理解java虚拟机》学习笔记7——Java虚拟机类生命周期
C/C++等纯编译语言从源码到最终执行一般要经历:编译、连接和运行三个阶段,连接是在编译期间完成,而java在编译期间仅仅是将源码编译为Java虚拟机可以识别的字节码Class类文件,Java虚拟机对中Class类文件的加载、连接都在运行时执行,虽然类加载和连接会占用程序的执行时间增加性能开销,但是却可以为java语言带来高度灵活性和扩展性,java的针对接口编程和类加载器机制实现的OSGi以及热
2012-08-26 19:01:24 3449
原创 《深入理解java虚拟机》学习笔记6——类加载机制
Java虚拟机类加载过程是把Class类文件加载到内存,并对Class文件中的数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的java类型的过程。在加载阶段,java虚拟机需要完成以下3件事:a.通过一个类的全限定名来获取定义此类的二进制字节流。b.将定义类的二进制字节流所代表的静态存储结构转换为方法区的运行时数据结构。c.在java堆中生成一个代表该类的java.l
2012-08-26 17:20:30 8557 4
原创 《深入理解java虚拟机》学习笔记5——Java Class类文件结构
Java语言从诞生之时就宣称一次编写,到处运行的跨平台特性,其实现原理是源码文件并没有直接编译成机器指令,而是编译成Java虚拟机可以识别和运行的字节码文件(Class类文件,*.class),字节码文件是一种平台无关的中间编译结果,字节码文件由java虚拟机读取,解析和执行,java虚拟机屏蔽了不同操作系统和硬件平台的差异性。如今的java虚拟机已经称为一种通用平台,不但能够运行java语言
2012-08-25 17:31:58 6561 1
原创 《深入理解java虚拟机》学习笔记4——Java虚拟机垃圾收集器
Java堆内存被划分为新生代和年老代两部分,新生代主要使用复制和标记-清除垃圾回收算法,年老代主要使用标记-整理垃圾回收算法,因此java虚拟中针对新生代和年老代分别提供了多种不同的垃圾收集器,JDK1.6中Sun HotSpot虚拟机的垃圾收集器如下:图中如果两个垃圾收集器直接有连线,则表明这两个垃圾收集器可以搭配使用。(1).Serial垃圾收集器:Serial是最基本、历
2012-08-19 18:21:49 15828 1
原创 《深入理解java虚拟机》学习笔记3——垃圾回收算法
Java虚拟机的内存区域中,程序计数器、虚拟机栈和本地方法栈三个区域是线程私有的,随线程生而生,随线程灭而灭;栈中的栈帧随着方法的进入和退出而进行入栈和出栈操作,每个栈帧中分配多少内存基本上是在类结构确定下来时就已知的,因此这三个区域的内存分配和回收都具有确定性。垃圾回收重点关注的是堆和方法区部分的内存。常用的垃圾回收算法有:(1).引用计数算法:给对象中添加一个引用计数器,每当有一个
2012-08-19 14:25:49 5644
原创 《深入理解java虚拟机》学习笔记2——Java内存溢出实例
通过简单的小例子程序,演示java虚拟机各部分内存溢出情况:(1).java堆溢出:Java堆用于存储实例对象,只要不断创建对象,并且保证GC Roots到对象之间有引用的可达,避免垃圾收集器回收实例对象,就会在对象数量达到堆最大容量时产生OutOfMemoryError异常。想要方便快速地产生堆溢出,要使用如下java虚拟机参数:-Xms10m(最小堆内存为10MB),-Xmx10m
2012-08-12 17:12:26 9262 5
原创 《深入理解java虚拟机》学习笔记1——Java内存结构
java虚拟机规范规定的java虚拟机内存其实就是java虚拟机运行时数据区,其架构如下:其中方法区和堆是由所有线程共享的数据区。Java虚拟机栈,本地方法栈和程序计数器是线程隔离的数据区。(1).程序计数器:是一块较小的内存空间,其作用可以看作是当前线程所执行的字节码的行号指示器,字节码解析器工作时通过改变程序计数器的值来选取下一条需要执行的字节码指令。程序的分支、循环、
2012-08-12 15:43:22 8199 1
原创 JavaScript写excel
最近同事让我帮忙做一个用javascript写excel的小工具,由于对javascript不是很熟,以前经常使用java和Apache的POI框架来写excel,从来没有使用过javascript来写excel,于是上网找了一下,发现相关资料很多,但是例子能够正常用的非常少,或多或少都有点小问题,参考网上例子加上自己调试之后,把自己的demo程序分享出来。JavaScript通过Active
2012-07-06 10:29:48 4925 2
原创 java解析xml文件读取本地dtd或者忽略dtd
Java程序在解析xml文件时,如果xml文件中指定了dtd,在默认会从指定的url下载dtd文件,但是很多情况下如果网络连接不上,或者防火墙原因,dtd文件无法下载下来导致程序报连接超时异常,解析xml失败。有两种方法解决该类问题:1.指定从本地读取dtd文件若要解析的xml文件中有如下的dtd声明:。publicId:被引用的外部实体的公共标识符,如果未提供,则为 null
2012-07-06 10:01:44 17988 1
转载 JAX-WS和JAX-RPC方式调用Web Service的Java客户端
基于JAX-WS调用Web Service的Java客户端一般采用两种方式:proxy方式以及dispatch方式。proxy方式,proxy的步骤主要如下图所示:一,proxy方式的调用代码片段一般如下:[java] view plaincopyURL wsdlURL = new URL("file:///D:/JAVA
2012-06-19 17:14:52 5437
原创 WebSphere8集群配置
WebSphere中有以下三种类型的应用服务器:Application Server:应用程序部署和运行的环境,一个应用服务器只能运行在一个Node节点中,但是一个Node节点可以有多个应用服务器。Node agent:创建节点集群时创建和安装节点代理,节点代理和Deployment manager协同工作,为节点提供管理功能。一个节点只有一个节点代理,一个节点代理可以管理节点中所有的应用
2012-06-17 16:51:12 13292
原创 WebSphere8管理和日志
WebSphere通过一个Admin服务提供管理功能,既可以通过浏览器访问WebSphere console来管理,也可以通过wsadmin脚本来管理,如图:WebSphere Console管理方式:可以通过如下两种方式访问WebSphere console:http://ip地址:9060/ibm/consolehttps://ip地址:9043/ibm/conso
2012-06-17 16:48:14 12265
原创 WebSphere8简介
WebSphere是一个JavaEE应用服务器,即JavaEE中间件,它为Web/EJB/WebService应用程序提供了通用的可扩展的、可靠的运行环境,使得应用程序开发者不必花费太多的精力考虑硬件、操作系统、网络、安全、事物以及消息服务等与业务逻辑无关的通用服务,而专注与开发业务逻辑。相比与WebSphere6.1和WebSphere7,WebSphere8全面支持JavaEE6,并且向前
2012-06-16 15:18:05 4976 2
原创 设计模式22——Visitor设计模式
Visitor访问者设计模式是在不修改已有程序结构的前提下,通过添加额外的“访问者”来完成对已有代码功能的提升。 Visitor访问者设计模式的角色:(1) 访问者角色(Visitor):声明一个访问接口。接口的名称和方法的参数标识了向访问者发送请求的元素角色。这样访问者就可以通过该元素角色的特定接口直接访问它。(2) 具体访问者角色(Concrete Visitor):实现访问者角色
2012-06-08 14:29:09 1533
原创 设计模式21——Interpreter设计模式
Interpreter解释器设计模式的定义:给定一个语言,定义其文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。Interpreter解释器设计模式角色如下:(1).抽象表达式(AbstractExpression)角色:声明一个所有的具体表达式角色都需要实现的抽象接口。这个接口主要定义一个interpret()方法,称做解释操作。 (2).终结符表达式(Te
2012-06-06 17:05:16 1704
原创 设计模式20——Mediator设计模式
Mediator中介者设计模式是通过一个中介对象封装一系列关于对象交互行为.Mediator中介者设计模式中的角色如下:(1).中介者(Mediator):抽象定义了“同事”(colleagues,稍后有定义)们通信的接口。(2).具体中介者(Concrete Mediator):实现了“同事”间的通信接口。(3).同事(Colleague):参与通信的实体抽象。(4).具体同
2012-06-01 14:41:08 1381
原创 JavaSE使用log4j个性化控制日志
在JavaSE中使用log4j来个性化控制日志,需求为:1.将Warning以上级别的log记录到error log中。2.将正常的Info信息记录到info log中。3.将Debug信息记录到trace log中。4.log信息尽可能详细,并且格式简明易读,关键内容包括:包名,类名,方法名,调用参数,异常信息,出错行数等等。每种log最多保留10个日志文件,超过10个文
2012-05-30 18:04:24 3442 1
原创 java中使用SAX读取和写出XML文件
SAX是一种事件驱动的流式XML文件处理方式,区别与DOM方式的是不需要在内存中建一棵DOM树,而是根据读取XML时遇到的标签事件来顺序处理,因此具有速度快,内存占用上的优点。SAX往往是大容量XML文件处理的首选方法,SAX读取XML相对比较简单,但是写XML就稍微比DOM方式复杂一些,网上的例子也不够全面和详细,刚好在工作中用到了XML读取和写出XML,记录下来以供参考。读取XML文件:
2012-05-28 20:21:28 15262 3
原创 设计模式19——Command设计模式
Command命令设计模式将一个请求封装成一个对象,从而使你可用不同的请求对客户进行操作。Command命令设计模式是对命令的封装。命令模式把发出命令的责任和执行命令的责任分割开,委派给不同的对象。每一个命令都是一个操作,命令请求发出请求要求执行一个操作;命令接受方收到请求,并执行操作。命令模式允许命令请求方和命令接收方独立开来,使得命令请求方不必 知道命令接收方的接口,更不必知道请求是怎么被接收
2012-05-18 15:46:05 2191
原创 设计模式18——Chain of Responsibility设计模式
Chain of Responsibility(CoR)责任链设计模式是用一系列请求处理器试图处理一个请求,这些请求处理器之间是一个松散耦合,唯一的共同点是在他们之间传递请求。例如客户端发送一个请求,请求处理器A先处理,如果A没有处理或者无法处理,就将请求传递给请求处理器B,如果B没有处理或者无法处理,就将请求传递到请求处理器C去处理,所有这些请求处理器构成一条请求处理责任链。Chain of R
2012-05-13 17:25:55 1776
原创 设计模式17——Observer设计模式
Observer观察者设计模式用于将对象的变化通知给感兴趣的用户。在Observer模式中的角色为主题(subject)与观察者(observer),观察者订阅它感兴趣的主题,一个主题可以被多个观 察者订阅,当主题的状态发生变化时,它必须通知(notify)所有订阅它的观察者,观察者检视主题的状态变化,并作出对应的动作,所以Observer模式也称之为Publish-Subscribe模式。 Ob
2012-05-11 15:41:37 1566
原创 设计模式16——Memento设计模式
Memento备忘录设计模式是一个保存另外一个对象内部状态拷贝的对象,这样以后就可以将该对象恢复到以前保存的状态。Memento备忘录设计模式的结构如下:Memento备忘录设计模式有以下3个重要角色:Originator:需要保存内部状态的对象。Caretaker:为Originator保存并恢复状态的对象。Memento:存放Originator内部状态的对象,由O
2012-04-25 19:03:25 2315
原创 设计模式15——Template Method设计模式
Template Method模板方法设计模式定义一个操作中算法的骨架,将具体步骤的执行延迟到子类中实现。Java中的抽象类就是使用了模板方法设计模式。模板方法设计模式结构如下:以文档处理为例,Template Method设计模式简单例子如下:abstract class DocumentUtil{ public void openDocument(String name)
2012-04-25 16:26:14 1438
原创 设计模式14——Flyweight设计模式
Flyweight享元设计模式是为了避免大量拥有相同内容的小类重复创建,而使大家共享一个类的模式。Flyweight享元设计模式实质是运用一个简单工厂方法模式,外加一个单类模式实现细粒度原件的共享。享元模式结构如下:Flyweight享元设计模式有两个重要概念:以文字处理软件中对象为例内部状态intrinsic:可以共享的对象,如相同的字。外部状态extrinsic:不
2012-04-24 17:52:17 1612
原创 设计模式13——Bridge设计模式
Bridge桥接设计模式是将一组功能(实现)与另一组使用该功能的其他对象(行为)分离开来,以便达到单一因素变化,然后使用对象调用的方式将这两组关联系起来,将问题的行为和实现分离开来实现,通过用聚合代替继承来解决子类爆炸性增长的问题。 Bridge桥接设计模式结构如下:还是以画图为例演示Bridge桥接设计模式,例子代码如下://行为interface Shape{pub
2012-04-24 15:17:46 1806
原创 设计模式12——Decorator设计模式
Decorator装饰设计模式是动态给一个对象添加一些额外的职责,但同时又不影响对象本身已有的功能。通常使用继承来实现功能的扩展,但是如果这些需要扩展的功能的种类很烦多,就会生成很多子类,增加系统复杂性。同时由于使用继承实现功能的扩展时,必须可预见这些扩展功能,这些功能是编译时就确定的了,是静态的。使用Decorator装饰设计模式就可以根据功能需要有用户动态决定加入的方式和时机,实现“即插即
2012-04-23 17:39:24 1632
原创 设计模式11——Composite设计模式
Composite组合设计模式属于对象的结构模式,有时又叫做部分-整体(Part-Whole)模式。 组合设计模式将对象组织到树型结构中,可以用来描述整体与部分的关系。组合模式可以使客户端将单纯元素与复合元素同等看待。 组合设计模式涉及到的三个角色 (1).抽象构件(Component)角色:这是一个抽象角色,它给参加组合的对象规定一个接口。这个角色给出共有的接口机器默认行为。 (
2012-04-23 15:46:10 1687
原创 设计模式10——Adapter设计模式
Adapter适配器模式是将两个不兼容的类组合在一起使用。生活中笔记本电脑和手机等数码产品的充电器就是一个适配器,将家用220V的交流电转换为笔记本或手机正常工作所需的目标电压和电流。适配器起到一种转换和包装的作用。Adapter设计模式主要目的组合两个不相干类,常用有两种方法:第一种解决方案是修改各自类的接口。但是如果没有源码,或者不愿意为了一个应用而修改各自的接口,则需要使用Adapter
2012-04-23 14:19:53 11933 1
原创 设计模式9——Façade设计模式
Façade门面设计模式为子系统中的一组接口提供一个一致的界面,应用程序本身将不再直接依赖于子系统原件,而是依赖一个门面,当想要修改某个原件的行为时,只需要修改实现类即可,应用程序本身不需要做任何修改。Façade门面设计模式结构如下:以JDBC为例演示Façade门面设计模式://JDBC Facadeinterface JDBCUtil{ public Statem
2012-04-23 11:10:35 3475
原创 《Effective java》读书笔记2——内存泄漏
JVM提供了垃圾回收器,java程序员再也不用想C/C++程序员一样整天为对象的清理工作而焦头烂额,但是并非说Java中不存在内存泄漏的情况,下面展示一个典型的内存溢出例子。使用数组作为底层数据结构实现一个Stack栈数据结构的容器,代码如下:public class Stack{ private Object[] elements; private int size = 0;
2012-04-21 18:58:38 2549
原创 《Effective java》读书笔记1——避免创建不必要的对象
Java中Sting很特别,有如下两种初始化方式:(1).String s1 = “This isstring1”;(2).String s2 = new String(“Thisis string2”);第一种字符串初始化方式,当有多于一个字符串的内容相同情况,字符串内容会放在字符串缓冲池中,即字符串内容在内存中只有一份。第二种字符串初始化方式,不论有没有字符串值相同,每次都会在
2012-04-21 18:56:16 2848 1
原创 设计模式8——Builder设计模式
Builder建造者模式将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。Builder模式是一步一步创建一个复杂的对象,它允许用户可以只通过指定复杂对象的类型和内容就可以构建它们,用户不需要了解所构建对象的内部具体构建细节,Builder建造设计模式的目的是为了将构造复杂对象的过程和它的部件解耦。Builder建造者设计模式中有两个重要角色:Director指导者和B
2012-04-21 14:50:58 2198 1
原创 设计模式7——Prototype设计模式
Prototype原型设计模式是指用原型实例指定创建对象的种类,并且通过拷贝这些原型来创建新的对象。Prototype原型模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何关于对象创建的细节。原型模式的UML图如下:Prototype模式例子如下://抽象原型类 abstract class Shape implements Colneable{ String
2012-04-19 15:16:46 1475
原创 Java中的深拷贝和浅拷贝
1.浅拷贝与深拷贝概念(1)浅拷贝(浅克隆) 浅拷贝又叫浅复制,将对象中的所有字段复制到新的对象(副本)中。其中,值类型字段(java中8中原始类型)的值被复制到副本中后,在副本中的修改不会影响到源对象对应的值。而引用类型的字段被复制到副本中的还是引用类型的引用,而不是引用的对象,在副本中对引用类型的字段值做修改会影响到源对象本身。浅拷贝简单归纳就是只复制一个对象,对象内部存在指向其他
2012-04-19 14:05:06 8967 1
原创 使用存储过程将Oracle数据批量导出为多个csv文件
数据库有如下表结构:aaa ( obj_id NUMBER, (Primary Key) obj_name VARCHAR2(80), obj_size NUMBER NOT NULL obj_time NUMBER NOT NULL ms_version
2012-04-16 16:35:22 9244 2
原创 设计模式6——Factory设计模式
Factory工厂设计模式为创建对象提供了一种抽象,而对使用者屏蔽了对象创建的具体细节过程,工厂模式有三种:简单工厂模式,抽象工厂模式和工厂方法模式。(1).简单工厂模式:又叫静态工厂模式,简单工厂只包括一个抽象产品类(该类可以是接口,也可以是具体的类),所有需要的产品类都是该抽象产品类的子类。简单工厂模式中工厂为具体产品工厂,产品为抽象产品,由工厂实例创建产品实例:一个生
2012-04-13 17:14:06 2222
原创 设计模式5——Strategy设计模式
Strategy策略设计模式主要是定义一系列的算法,把这些算法封装成单独的类,在运行时动态选择需要的算法,策略模式机制如下:策略模式例子如下://文本替换策略abstract class TextStrategy { protected String text; public TextStrategy(String text) { t
2012-04-13 13:05:27 1378
原创 设计模式4——Itrator设计模式
Iterator迭代器模式,提供一种统一的方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节,迭代器模式是为容器而设计。程序对容器对象的访问必然涉及到遍历算法,不同的容器遍历算法是不同的,List,Stack和Set等等常用容器遍历元素的算法各不相同。解决容器遍历算法差异有两种方案:第一,可以将遍历方法塞到容器对象中去,容器承受了过多的功能,它不仅要负责自己“容
2012-04-12 15:51:54 1813
XFire与Spring框架集成,实现WebService
2011-03-04
基于Annotation写的简单数据校验框架
2010-08-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人