`
zhyt710
  • 浏览: 202507 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

应用java的代理类与annotation

阅读更多

一.代理模式在架构中有者广泛的用途。java中已经提供了动态代理类来方便大家使用。下面是应用的一个例子。

1.接口类 UseJavaProxy.java

package test;

public interface UseJavaProxy {
	public void theCloseMethod();
}

 

2.实现测试类 UseJavaProxyImpl.java

package test;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class UseJavaProxyImpl implements UseJavaProxy {
	
	public void theCloseMethod() {
		System.out.println("the close method is in process");
	}

	public static void main(String[] args) {
		//得到接口声明的方法
		UseJavaProxy useJavaProxy = (UseJavaProxy) Proxy.newProxyInstance(UseJavaProxyImpl.class.getClassLoader(),
				UseJavaProxyImpl.class.getInterfaces(),
				new InvocationHandler(){
			
			public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
				System.out.println("before--------"+method.getName());
				//执行真正的方法
				method.invoke(new UseJavaProxyImpl(),args);
				System.out.println("after--------"+method.getName() + "\n");
				return null;
			}
			
		});
		
		//测试
		useJavaProxy.theCloseMethod();
	}

}

 

 二.当代理和java的annoutation结合结合使用的时候,可以在某些地方取代xml等配置,方便我们的编程。下面是上面例子的进一步加深,结合annotation

1.annotation类  Exetable.java

package test;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

//加载在VM中,在运行时进行映射
@Retention(RetentionPolicy.RUNTIME)
//限定此annotation只能标示方法
@Target(ElementType.METHOD)
public @interface Exetable {
	String value();
}

2. 接口类 UseJavaProxy.java

package test;

public interface UseJavaProxy {
	@Exetable("true")
	public void theCloseMethod();
}

3. 实现测试类 UseJavaProxyImpl.java

package test;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class UseJavaProxyImpl implements UseJavaProxy {
	
	public void theCloseMethod() {
		System.out.println("the close method is in process");
	}

	public static void main(String[] args) {
		//得到接口声明的方法
		UseJavaProxy useJavaProxy = (UseJavaProxy) Proxy.newProxyInstance(UseJavaProxyImpl.class.getClassLoader(),
				UseJavaProxyImpl.class.getInterfaces(),
				new InvocationHandler(){
			
			public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
				System.out.println("before--------"+method.getName());
				//执行真正的方法
				if(method.isAnnotationPresent(Exetable.class)) {
					//当然我们的 Exetable 完全可以不定义 String value(); 语句
					//这样我们简单的判断一下执行方法是否被标记修饰就可以了,有的话,我们可以
					//得到更多的信息,来分支判断,如我们完全可以把 标志值作为判断条件来决定
					//是否执行一个方法,以及执行该方法的前后要做什么
					String annotationValue = method.getAnnotation(Exetable.class).value();
					System.out.println("the annotation value is " + annotationValue);
				    method.invoke(new UseJavaProxyImpl(),args);
				}
				System.out.println("after--------"+method.getName() + "\n");
				return null;
			}
			
		});
		
		//测试
		useJavaProxy.theCloseMethod();
	}

}

 

 

分享到:
评论

相关推荐

    JAVA_API1.6文档(中文)

    javax.xml.bind.annotation.adapters XmlAdapter 及其规范定义的子类允许任意 Java 类与 JAXB 一起使用。 javax.xml.bind.attachment 此包由基于 MIME 的包处理器实现,该处理器能够解释并创建基于 MIME 的包格式的...

    Java 1.6 API 中文 New

    javax.xml.bind.annotation.adapters XmlAdapter 及其规范定义的子类允许任意 Java 类与 JAXB 一起使用。 javax.xml.bind.attachment 此包由基于 MIME 的包处理器实现,该处理器能够解释并创建基于 MIME 的包格式的...

    java高手真经 光盘源码

    第1部分(2个程序包) HelloWorld.zip 01.Java入门...javareflection.zip 26.Java反射机制与动态代理 javageneric.zip 27.Java泛型编程 javaannotation.zip 28.Java注释符编程 javafeature.zip 29.Java5.0语言新特性

    java api最新7.0

    javax.xml.bind.annotation.adapters XmlAdapter 及其规范定义的子类允许任意 Java 类与 JAXB 一起使用。 javax.xml.bind.attachment 此包由基于 MIME 的包处理器实现,该处理器能够解释并创建基于 MIME 的包格式的...

    JavaAPI1.6中文chm文档 part1

    javax.xml.bind.annotation.adapters XmlAdapter 及其规范定义的子类允许任意 Java 类与 JAXB 一起使用。 javax.xml.bind.attachment 此包由基于 MIME 的包处理器实现,该处理器能够解释并创建基于 MIME 的包格式的...

    JAVA上百实例源码以及开源项目源代码

     Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...

    JavaAPI中文chm文档 part2

    javax.xml.bind.annotation.adapters XmlAdapter 及其规范定义的子类允许任意 Java 类与 JAXB 一起使用。 javax.xml.bind.attachment 此包由基于 MIME 的包处理器实现,该处理器能够解释并创建基于 MIME 的包格式的...

    java开源包4

    PortGroper 是一款java写的开源拒绝服务测试工具,它不是僵尸网络类的ddos,而是使用大量的代理作为bots发起DDOS。Port Groper可以与用测试防火墙,干扰web 统计脚本的跟踪,为网站增加流量..往好了用什么都能干,就是...

    Java开发详解.zip

    020609_【第6章:面向对象(高级)】_抽象类与接口的应用笔记.pdf 020610_〖第6章:面向对象(高级)〗_实例分析:宠物商店笔记.pdf 020611_【第6章:面向对象(高级)】_Object类笔记.pdf 020612_【第6章:面向对象...

    JAVA上百实例源码以及开源项目

     Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...

    java jdk-api-1.6 中文 chmd

    java.awt.datatransfer 提供在应用程序之间和在应用程序内部传输数据的接口和类。 java.awt.dnd Drag 和 Drop 是一种直接操作动作,在许多图形用户界面系统中都会遇到它,它提供了一种机制,能够在两个与 GUI 中...

    java开源包11

    PortGroper 是一款java写的开源拒绝服务测试工具,它不是僵尸网络类的ddos,而是使用大量的代理作为bots发起DDOS。Port Groper可以与用测试防火墙,干扰web 统计脚本的跟踪,为网站增加流量..往好了用什么都能干,就是...

    java开源包101

    PortGroper 是一款java写的开源拒绝服务测试工具,它不是僵尸网络类的ddos,而是使用大量的代理作为bots发起DDOS。Port Groper可以与用测试防火墙,干扰web 统计脚本的跟踪,为网站增加流量..往好了用什么都能干,就是...

    java开源包6

    PortGroper 是一款java写的开源拒绝服务测试工具,它不是僵尸网络类的ddos,而是使用大量的代理作为bots发起DDOS。Port Groper可以与用测试防火墙,干扰web 统计脚本的跟踪,为网站增加流量..往好了用什么都能干,就是...

    java开源包9

    PortGroper 是一款java写的开源拒绝服务测试工具,它不是僵尸网络类的ddos,而是使用大量的代理作为bots发起DDOS。Port Groper可以与用测试防火墙,干扰web 统计脚本的跟踪,为网站增加流量..往好了用什么都能干,就是...

    java开源包5

    PortGroper 是一款java写的开源拒绝服务测试工具,它不是僵尸网络类的ddos,而是使用大量的代理作为bots发起DDOS。Port Groper可以与用测试防火墙,干扰web 统计脚本的跟踪,为网站增加流量..往好了用什么都能干,就是...

    java开源包8

    PortGroper 是一款java写的开源拒绝服务测试工具,它不是僵尸网络类的ddos,而是使用大量的代理作为bots发起DDOS。Port Groper可以与用测试防火墙,干扰web 统计脚本的跟踪,为网站增加流量..往好了用什么都能干,就是...

    java开源包10

    PortGroper 是一款java写的开源拒绝服务测试工具,它不是僵尸网络类的ddos,而是使用大量的代理作为bots发起DDOS。Port Groper可以与用测试防火墙,干扰web 统计脚本的跟踪,为网站增加流量..往好了用什么都能干,就是...

    [Java参考文档]

    javax.xml.bind.annotation.adapters XmlAdapter 及其规范定义的子类允许任意 Java 类与 JAXB 一起使用。 javax.xml.bind.attachment 此包由基于 MIME 的包处理器实现,该处理器能够解释并创建基于 MIME 的包格式的...

Global site tag (gtag.js) - Google Analytics