- 浏览: 468389 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (146)
- Maven (3)
- Quartz (10)
- Hessian (3)
- JDK (42)
- eclipse (4)
- 设计思想 (6)
- XML (8)
- JavaMail (1)
- Spring (11)
- mina (1)
- HsqlDb (1)
- Cache (2)
- Tool (6)
- 心情 (5)
- JQuery (0)
- Hadoop (5)
- Hbase (3)
- 自动构建 (7)
- JNDI (0)
- 代码赏析 (5)
- Oracle (1)
- Excel (4)
- Effective Java (5)
- JAXB (4)
- fdafasdf (1)
- ccc (0)
- web (3)
- concurrent (1)
- CVS (1)
- eclipse plugin (2)
- Apache (10)
最新评论
-
chxiaowu:
nice!
Quartz实现固定执行次数 -
zxjlwt:
学习了。http://surenpi.com
自定义ClassLoader -
kadlly:
public static final Logger log ...
Hessian 权限认证 -
spring_springmvc:
java程序语言学习教程 地址http://www.zuida ...
Java-Final -
liushuiwuyan:
[img][/img]
设计模式-单例
1. 首先定义一个接口.
2. 再定义一个接口的实现类
我们使用面向接口编程,最简单的调用方式是[1]
然而使用这种调用方式使得接口和实现通过硬编码的方式耦合在了一起.
JDK动态代理可以生成一个代理对象.
3. 创建JDK动态代理Handler[2]
4. 创建调用接口.
看到这里我发现了,当我们调用Spring中的getBean(),他会返回一个初始化好的实例给你.
IOC很简单的把程序的耦合[1],移到了配置文件ApplicationContext.xml当中;当我们调用Spring中的AOP时,他会返回一个初始化好的实例给你,但是这个实例是一个JKDProxy,这样就可以在invoke中添加一些自定义的行为[2].
总结:约定优于配置,我们完全可以跳过JDK的动态代理来实现完全基于IOC的“伪”动态代理,规则如下:
存储路径规则:
proxy:存储接口
proxy.impl:存储接口的实现类
类名定义规则:
ITarget:接口类名
Target:接口实现类名
注意:接口的类名必须以"I"开头,后面符合Java命名规范,实现类必须为接口名称去掉"I".
5. "伪"动态代理
6. 对伪代理的调用
这样可以替代JDK动态代理,而且其实现效率更高,不需要Spring配置,只需要通过这个"伪"代理就可以实现从接口到实现的转换,其出错的概率也更低.
当然我这里给出的只是一个简单的范例,代码也是草草,不能和Spring这强大的框架相比,但是其效率绝对是最高的.
这里还有很多需要完善的,比如说代理对象有复杂的对象作为其输入参数,还有日志及其异常处理等等.
package proxy; /** * 操作接口 * version 1.0 Jul 15, 2010 */ public interface ITarget { /** * 操作方法 */ public void operator(); }
2. 再定义一个接口的实现类
package proxy.impl; import proxy.ITarget; public class Target implements ITarget { @Override public void operator() { // TODO Auto-generated method stub System.out.println(">>>正在调用Targer.operator()方法!"); } }
我们使用面向接口编程,最简单的调用方式是[1]
ITarget it=new Target(); it.operator();
然而使用这种调用方式使得接口和实现通过硬编码的方式耦合在了一起.
JDK动态代理可以生成一个代理对象.
3. 创建JDK动态代理Handler[2]
package proxy.handler; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; public class MethodHandler implements InvocationHandler { private Object targetObject; public Object newProxy(Object targetObject) { this.targetObject = targetObject; return Proxy.newProxyInstance(targetObject.getClass().getClassLoader(), targetObject.getClass().getInterfaces(), this); } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // TODO Auto-generated method stub Object ret = null; try { ret = method.invoke(this.targetObject, args); } catch (Exception e) { e.printStackTrace(); throw new java.lang.RuntimeException(e); } return ret; } }
4. 创建调用接口.
MethodHandler handler=new MethodHandler(); ITarget ii=(ITarget)handler.newProxy(new Target()); ii.operator();
看到这里我发现了,当我们调用Spring中的getBean(),他会返回一个初始化好的实例给你.
IOC很简单的把程序的耦合[1],移到了配置文件ApplicationContext.xml当中;当我们调用Spring中的AOP时,他会返回一个初始化好的实例给你,但是这个实例是一个JKDProxy,这样就可以在invoke中添加一些自定义的行为[2].
总结:约定优于配置,我们完全可以跳过JDK的动态代理来实现完全基于IOC的“伪”动态代理,规则如下:
存储路径规则:
proxy:存储接口
proxy.impl:存储接口的实现类
类名定义规则:
ITarget:接口类名
Target:接口实现类名
注意:接口的类名必须以"I"开头,后面符合Java命名规范,实现类必须为接口名称去掉"I".
5. "伪"动态代理
package proxy.handler; public class ChgHandler { public Object invoke(Class interfaceName) throws ClassNotFoundException, InstantiationException, IllegalAccessException{ String path=interfaceName.getName(); int point=path.lastIndexOf("."); String pack=path.substring(0,point); String clsname=path.substring(point+1); String proxyimpl=pack.concat(".impl"); String proxynameimpl=clsname.replaceFirst("I", ""); String proxyName=proxyimpl.concat(".").concat(proxynameimpl); Class<?> proxyclass=Class.forName(proxyName); return proxyclass.newInstance(); } }
6. 对伪代理的调用
ChgHandler chgh=new ChgHandler(); ITarget hh=(ITarget) chgh.invoke(ITarget.class); hh.operator();
这样可以替代JDK动态代理,而且其实现效率更高,不需要Spring配置,只需要通过这个"伪"代理就可以实现从接口到实现的转换,其出错的概率也更低.
当然我这里给出的只是一个简单的范例,代码也是草草,不能和Spring这强大的框架相比,但是其效率绝对是最高的.
这里还有很多需要完善的,比如说代理对象有复杂的对象作为其输入参数,还有日志及其异常处理等等.
发表评论
-
Java Application Cache
2016-09-27 19:25 884Application Cache is used very ... -
Java 字符串分词
2015-01-02 14:43 1749在Java的世界里有个类型 ... -
jdk 1.6 新特性,集成Groovy, 性能很差
2014-04-02 14:27 1276性能都是相对的,如果调用量不是很大的话,可以忽略,毕竟使用为主 ... -
Fake Code easy implements
2014-04-01 15:41 1027package org.miniframe.modules ... -
JDK regex 用法及用途
2014-03-31 15:48 1215查找 Boolean flag = pattern.mat ... -
生产者消费者(四)
2014-03-04 12:32 1148需求: 多个生产者不断的生产产品,多个消费者不断的消费产品,仓 ... -
生产者消费者(三)
2014-03-04 10:59 960需求: 多个生产者不断的生产产品,多个消费者不断的消费产品,仓 ... -
生产者消费者(二)
2014-03-03 15:40 695需求: 多个生产者不断的生产产品,多个消费者不断的消费产品,仓 ... -
生产者消费者模式(一)
2014-02-28 14:30 1031需求: 多个生产者不断的生产产品,多个消费者不断的消费产品,仓 ... -
查看Class文件使用的JDK版本
2013-10-30 14:17 1115由于JDK一般是向下兼容的,所以有时候本地的JDK版本比类库的 ... -
Java源代码转码
2012-12-20 17:22 1323现在中国的项目很多,编码无非是UTF-8,GBK,GB2312 ... -
Tomcat集成OSGI,并通过JNDI开放Web调用
2012-12-03 11:22 3135Tomcat集成OSGi,首先要选择OSGI服务器,我这里采用 ... -
JDK的Logging
2012-11-07 15:49 1683jdk自带有一个log日志,对于一般的使用,仅够了. 代码如下 ... -
java.util.*
2012-11-06 14:23 1377java.util 工具包,灰常的有用,有机会一定要研读源码。 ... -
java.util.concurrent.*
2012-11-02 10:38 17761. java.util.concurrent.ArrayBl ... -
java.util.rt.*
2012-10-31 13:51 11131. java.util.HashMap 散列表,主要是以离散 ... -
巧秒设计方法,不返回null
2016-09-27 19:32 723/** * {@inheritDoc} * ... -
java doc 代码文档
2012-07-13 13:58 1330对于代码规范不解释了,网上很多。 在编写代码的时候,有一点灰 ... -
接口与抽象类
2012-07-11 16:53 11241. 接口设计必谨慎,除非业务变更,否则打死不能动接口。[不变 ... -
JVM优化机制好诡异
2012-04-20 08:43 1466long i[] = new long[1000000]; ...
相关推荐
这篇博客将对JDK的动态代理进行深入的总结,探讨其原理、使用场景以及实际应用。 首先,我们要了解JDK动态代理的核心类——`java.lang.reflect.Proxy`和`java.lang.reflect.InvocationHandler`。`Proxy`类用于生成...
本篇主要探讨的是基于Java的两种动态代理机制:JDK动态代理和CGLIB代理,它们在Spring框架中的应用,以及与Hibernate二级缓存的关联。 首先,JDK动态代理是通过`java.lang.reflect.Proxy`类来实现的。这个类提供了...
Webservice是一种基于网络的、开放式的信息交换标准,它允许不同系统之间进行数据交换,实现应用程序之间的互操作性。本教程将带你入门Webservice的开发,特别聚焦于使用JDK(Java Development Kit)来构建...
2. **jdk.management.agent**:这部分源码涉及到JDK的管理代理,它提供了一种标准的方式来管理和监控Java应用程序。通过Java Management Extensions (JMX),开发者可以获取运行时信息,如内存使用、线程状态等。 3....
对于JDK 1.8和J.6,开发者可以通过这些文档了解各个类和接口的功能、用法以及示例,从而更好地利用它们进行软件开发。无论是初学者还是经验丰富的开发者,都应该充分利用这些API文档,以提高编程效率和代码质量。
JDK1.6,也称为Java SE 6,是Java平台的一个重要版本,它包含Java编译器、Java运行时环境(JRE)、调试器、文档、示例程序以及各种实用工具。在本案例中,我们讨论的是JDK1.6的64位版本,具体为JDK1.6.0_45,这是一...
5. **动态代理(Dynamic Proxies)**:JDK1.6对动态代理进行了优化,使得开发者能够更容易地创建满足特定接口的动态代理对象,用于实现AOP(面向切面编程)或者事件监听等功能。 6. **改进的日志框架**:JDK1.6中的...
JDK,全称为Java Development Kit,是Oracle公司提供的用于开发和运行Java应用程序的工具集合。它包括Java编译器、Java虚拟机(JVM)、Java类库以及各种开发工具,如Javadoc和JAR打包工具等。JDK的版本更新通常会...
3. **改进的Swing组件**:JDK 1.6对Swing库进行了优化,包括更快的渲染速度,新的布局管理器,以及更好的国际化支持。 4. **NIO.2**:新增了`java.nio.file`包,提供了异步文件操作,增强了文件系统访问能力。 5. ...
9. **性能优化**: 针对大规模的Web服务应用,JDK 5的JAX-WS支持服务端的多线程处理,以及通过缓存和HTTP连接池等方式提升性能。 10. **测试工具**: 可以使用`wsdl2java`工具生成客户端代码,并利用`soapUI`等工具...
1. 改进的性能:JDK 1.6通过优化虚拟机(JVM)和编译器,提高了应用程序的运行效率,尤其是在垃圾回收和内存管理方面。 2. 动态代理:Java语言增加了动态代理类的生成,使得开发者可以方便地创建代理对象,实现对原...
j2se6.chm是Java SE 6的官方帮助文档,通常包含了API详细说明、教程和示例,是开发者查阅和学习JDK 1.6的重要参考资料。 总结起来,JDK 1.6作为Java发展中的一个重要阶段,其API的丰富和改进极大地推动了Java应用的...
2. **动态代理**:JDK6引入了`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口,支持在运行时创建具有指定方法调用行为的代理类,这对于实现AOP(面向切面编程)和事件监听等场景非常有用。...
此外,JDK 1.6还优化了垃圾收集器,提升了性能,并引入了泛型的完全支持,使得类型安全性和代码可读性得到显著提升。 两者之间的主要区别在于语言特性和库的更新。JDK 1.8在许多方面都比1.6更加现代化,特别是其...
4. **改进的垃圾回收**:JDK 1.6的垃圾回收器进行了优化,提高了应用程序的响应速度和内存利用率,特别是对于服务器端应用。 5. **并发工具**:Java Concurrency API得到了扩展,添加了如`ConcurrentHashMap`和`...
**JDK1.6 API帮助文档** JDK1.6 API帮助文档是Java开发者的重要参考资料,它详尽地列出了Java SE 6平台的核心类库,包括...文档中的类、接口和方法都配有详细的说明和示例,是学习和开发Java SE 6应用程序的必备参考。
JDK(Java Development Kit)是Oracle公司发布的用于开发Java应用程序的软件开发工具包,它是Java开发环境的基础。JDK包含了Java运行时环境(JRE)、Java编译器(javac)、Java文档生成器(javadoc)以及一系列的...
API文档是学习和开发Java应用不可或缺的一部分,它提供了丰富的示例代码、类结构和方法说明,有助于提升开发效率和代码质量。 **JDK API 1.6.0** 的主要特点和关键知识点包括: 1. **核心类库增强**:JDK 1.6.0在...
Java JDK 1.6是Java开发工具包的一个重要版本,发布于2006年,引入了许多增强功能和新特性,极大地提升了开发效率和应用程序性能。JAXB(Java Architecture for XML Binding)2.0是在这个版本中得到广泛推广的一个...