`
zhyt710
  • 浏览: 206459 次
  • 性别: 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();
	}

}

 

 

分享到:
评论

相关推荐

    struts 拦截器,扩展,以及java annotation

    - 拦截器是Struts2的核心组件之一,它们是基于Java的动态代理机制实现的。在Action调用前后,拦截器可以执行一系列预定义的任务,如日志记录、权限验证、数据校验等。 - 拦截器链是由多个拦截器按照特定顺序组成的...

    JAVA Annotation学习

    Java注解(Annotation)是Java语言的一个重要特性,它为元数据提供了强大的支持。元数据是关于数据的数据,可以提供额外的信息,这些信息虽然不是程序运行所必需的,但能够帮助编译器、JVM(Java虚拟机)或工具更好...

    Core.Java基础教程_13.高级编程-反射、动态代理与Annotation.pdf

    - 动态代理:Java的`java.lang.reflect.Proxy`类可以创建动态代理对象,实现代理模式,用于AOP(面向切面编程)等。 使用反射时,需要注意以下几点: - 安全性:反射可以访问私有成员,可能导致安全问题,因此需要...

    JavaPoet+Annotation实现android动态权限申请.7z

    3. 使用JavaPoet自动生成权限请求代理类:遍历应用中的所有类和方法,找出所有`@RequestPermission`注解,然后根据这些信息生成代理类的源代码。 4. 编译和运行:生成的代理类在编译后会被加入到应用中,运行时权限...

    JAVA_API1.6文档(中文)

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

    JavaAnnotation实例.docx

    它们在 Java 中的应用广泛,尤其是在简化开发和自动化配置方面,例如在 Spring、Hibernate 和 JUnit4 等框架中。 为何使用 Annotation? 1. 简化配置:Annotation 可以减少甚至消除传统的 XML 配置文件,使代码更...

    浙大软件学院培训课件java reflection annotation

    Java反射(Reflection)和注解(Annotation)是Java编程语言中的两个重要特性,它们在实际开发中有着广泛的应用。在“浙大软件学院培训课件java reflection annotation”中,我们将会探讨这两个主题,特别是如何利用它们...

    java 注解annotation的使用以及反射如何获取注解

    Java注解(Annotation)是Java语言提供的一种元数据机制,用于向编译器或JVM提供额外的信息。这些信息可以用来验证代码、控制代码生成、配置应用等。注解是自Java 5版本引入的特性,它使得程序员可以在源代码中嵌入...

    基于annotation的aop实现

    动态代理的关键在于,它能够在运行时创建一个与原始类具有相同接口的代理类,代理类会在调用原始方法前后执行相应的通知。 在实际应用中,我们通常会结合`@Component`、`@Service`、`@Repository`等Spring的组件...

    Java动态代理自建注解

    在Java编程中,动态代理是一种强大的工具,它允许我们在运行时创建代理类,这些代理类可以拦截并增强原对象的方法调用。自定义注解则是Java元编程的一部分,它可以为代码提供元数据,用于编译时或运行时的检查、处理...

    Java 1.6 API 中文 New

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

    JAVA设计模式在JDK中的应用

    ### JAVA设计模式在JDK中的应用 #### 一、引言 在软件开发过程中,设计模式作为一套被广泛接受的解决方案,能够帮助开发者解决常见的设计问题。Java作为一门流行的编程语言,其标准库(JDK)中巧妙地融入了多种设计...

    比XML更好用的JavaAnnotation2022优秀文档.ppt

    Java注解(Annotation)是Java语言的一个重要特性,它为元数据提供了强大的支持。自Java 5引入以来,注解已经广泛应用于各种场景,如编译时检查、运行时处理、简化配置等,逐渐取代了XML配置文件,尤其是在Java企业...

    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 的包格式的...

    Spring_Annotation_AOP

    总的来说,"Spring_Annotation_AOP"资料将帮助你掌握如何在Spring框架中利用注解实现面向切面编程,理解AOP的核心概念和实际应用场景,从而提升你的Java开发技能。通过学习和实践,你可以更加熟练地运用Spring框架来...

    Java动态代理程序切片示例

    Java动态代理是Java编程中的一种高级技术,它允许在运行时创建代理类,这些代理类可以作为原有类的代理,从而在调用原有方法时添加额外的功能或行为。在这个示例中,我们专注于如何利用注解来实现对JavaBean的动态...

    Java核心API

    Java.lang包是Java的核心包之一,包含了构成Java语言基础的类和接口,如String、Object、Thread等。 #### Java.lang.annotation Java.lang.annotation包自J2SE5起引入,支持注释(元数据),增强了代码的可读性和...

    annotation 应用

    在IT行业中,注解(Annotation)是Java编程语言的一个强大特性,它允许元数据(metadata)以声明式的方式与代码关联。"Annotation应用"主要关注的是如何在实际开发中利用注解来实现面向切面编程(Aspect Oriented ...

Global site tag (gtag.js) - Google Analytics