一.代理模式在架构中有者广泛的用途。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();
}
}
分享到:
相关推荐
- 拦截器是Struts2的核心组件之一,它们是基于Java的动态代理机制实现的。在Action调用前后,拦截器可以执行一系列预定义的任务,如日志记录、权限验证、数据校验等。 - 拦截器链是由多个拦截器按照特定顺序组成的...
Java注解(Annotation)是Java语言的一个重要特性,它为元数据提供了强大的支持。元数据是关于数据的数据,可以提供额外的信息,这些信息虽然不是程序运行所必需的,但能够帮助编译器、JVM(Java虚拟机)或工具更好...
3. 使用JavaPoet自动生成权限请求代理类:遍历应用中的所有类和方法,找出所有`@RequestPermission`注解,然后根据这些信息生成代理类的源代码。 4. 编译和运行:生成的代理类在编译后会被加入到应用中,运行时权限...
javax.xml.bind.annotation.adapters XmlAdapter 及其规范定义的子类允许任意 Java 类与 JAXB 一起使用。 javax.xml.bind.attachment 此包由基于 MIME 的包处理器实现,该处理器能够解释并创建基于 MIME 的包格式的...
它们在 Java 中的应用广泛,尤其是在简化开发和自动化配置方面,例如在 Spring、Hibernate 和 JUnit4 等框架中。 为何使用 Annotation? 1. 简化配置:Annotation 可以减少甚至消除传统的 XML 配置文件,使代码更...
Java反射(Reflection)和注解(Annotation)是Java编程语言中的两个重要特性,它们在实际开发中有着广泛的应用。在“浙大软件学院培训课件java reflection annotation”中,我们将会探讨这两个主题,特别是如何利用它们...
Java注解(Annotation)是Java语言提供的一种元数据机制,用于向编译器或JVM提供额外的信息。这些信息可以用来验证代码、控制代码生成、配置应用等。注解是自Java 5版本引入的特性,它使得程序员可以在源代码中嵌入...
动态代理的关键在于,它能够在运行时创建一个与原始类具有相同接口的代理类,代理类会在调用原始方法前后执行相应的通知。 在实际应用中,我们通常会结合`@Component`、`@Service`、`@Repository`等Spring的组件...
在Java编程中,动态代理是一种强大的工具,它允许我们在运行时创建代理类,这些代理类可以拦截并增强原对象的方法调用。自定义注解则是Java元编程的一部分,它可以为代码提供元数据,用于编译时或运行时的检查、处理...
javax.xml.bind.annotation.adapters XmlAdapter 及其规范定义的子类允许任意 Java 类与 JAXB 一起使用。 javax.xml.bind.attachment 此包由基于 MIME 的包处理器实现,该处理器能够解释并创建基于 MIME 的包格式的...
### JAVA设计模式在JDK中的应用 #### 一、引言 在软件开发过程中,设计模式作为一套被广泛接受的解决方案,能够帮助开发者解决常见的设计问题。Java作为一门流行的编程语言,其标准库(JDK)中巧妙地融入了多种设计...
Java注解(Annotation)是Java语言的一个重要特性,它为元数据提供了强大的支持。自Java 5引入以来,注解已经广泛应用于各种场景,如编译时检查、运行时处理、简化配置等,逐渐取代了XML配置文件,尤其是在Java企业...
第1部分(2个程序包) HelloWorld.zip 01.Java入门...javareflection.zip 26.Java反射机制与动态代理 javageneric.zip 27.Java泛型编程 javaannotation.zip 28.Java注释符编程 javafeature.zip 29.Java5.0语言新特性
javax.xml.bind.annotation.adapters XmlAdapter 及其规范定义的子类允许任意 Java 类与 JAXB 一起使用。 javax.xml.bind.attachment 此包由基于 MIME 的包处理器实现,该处理器能够解释并创建基于 MIME 的包格式的...
总的来说,"Spring_Annotation_AOP"资料将帮助你掌握如何在Spring框架中利用注解实现面向切面编程,理解AOP的核心概念和实际应用场景,从而提升你的Java开发技能。通过学习和实践,你可以更加熟练地运用Spring框架来...
Java动态代理是Java编程中的一种高级技术,它允许在运行时创建代理类,这些代理类可以作为原有类的代理,从而在调用原有方法时添加额外的功能或行为。在这个示例中,我们专注于如何利用注解来实现对JavaBean的动态...
Java.lang包是Java的核心包之一,包含了构成Java语言基础的类和接口,如String、Object、Thread等。 #### Java.lang.annotation Java.lang.annotation包自J2SE5起引入,支持注释(元数据),增强了代码的可读性和...
在IT行业中,注解(Annotation)是Java编程语言的一个强大特性,它允许元数据(metadata)以声明式的方式与代码关联。"Annotation应用"主要关注的是如何在实际开发中利用注解来实现面向切面编程(Aspect Oriented ...