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

使用反射机制调用属性和私有成员与代理模式的介绍

    博客分类:
  • java
 
阅读更多

使用反射机制调用属性:

通过反射机制可以获得类的属性,获得到的属性同样的可以进行赋值、得值操作,调用getField方法并传递属性的名称可以获得【学Java,到凯哥学堂kaige123.com】指定的属性,调用getFields方法则可以获得全部属性,但是这种方式不能获得私有属性: 代码示例:

image

Student类示例:

image

运行结果:

image

从运行结果可以看出只拿出了公开的属性,私有的属性拿不到。

使用反射机制调用私有成员:

1.调用私有属性

在反射机制里调用私有属性需要通过getDeclaredFields方法或者getDeclaredField方法,前者是获得类里所有的私有属性,后者是获得指定的私有属性,类似于getFields和getField。但是使用getDeclaredFields或者getDeclaredField方法获得私有属性之后需要再调用setAccessible方法进行一个调用授权的操作才能对获得到的私有属性进行操作: 代码示例:

image

Student代码示例:

image

运行结果:

image

2.调用私有方法 调用私有方法也是一样的,需要先通过getDeclaredMethods方法或者getDeclaredMethod方法来获得私有方法,然后还得再调用setAccessible方法进行调用授权: 代码示例:

image

Student代码示例:

image

运行结果:

image

3.调用私有构造器

image

Student代码示例:

image

运行结果:

image

代理模式: 代理模式又称为切面编程,顾名思义就是可以把代码切开一个缝隙塞入一些代码,代理模式可以在方法的前后监控异常,也可以把日志打印语句放在代理里,方法里就不需要写日志打印的语句了,资源的开启和关闭这种重复次数多的的代码也可以写在代理里,同样的在方法里就不需要再写了,所以代理模式类似于中介一样,在代码中间解决一些反复而常规的代码。 编写代理模式的代码,第一步是写一个接口声明一个方法,第二步写一个A类去实现这个接口,在方法里写上一些代码,第三步写一个B类,这个类也要实现接口,并且在这个类的属性上声明接口的变量,构造器里声明接口类型的参数,用于把对象存储到属性里,接着在重写接口的方法里调用A实现类里的方法,第四步写运行类,在main方法里首先new A类的对象出来,然后new B 类的对象并且把A类的对象放进B类的构造器里,最后用B类的对象调用方法。 代码示例:

image

image

image

image

运行结果:

image

代码图解:

image

还可以使用继承的方式编写代理模式,但是继承有个弊端,万一这个类不允许被继承(final修饰的类),或者还需要继承其他的类(Java只能单一继承),那么就无法编写代理模式,因为接口可以实现多个,所以使用接口是最好的。 代码示例:

image

image

image

运行结果:

image

代码图解:

image

0
0
分享到:
评论

相关推荐

    Java反射机制与动态代理

    Java反射机制是Java语言的一个强大特性,它允许程序在运行时检查和操作类、接口、字段和方法的信息。通过反射,我们可以在不知道具体类的情况下,动态地获取类的信息并创建对象,调用方法,修改字段值。这种机制在...

    JAVA 反射机制与动态代理ppt

    2. **Field类**:代表类的成员变量,可以获取和设置对象的属性值,包括公有和私有属性。`Field`类提供了`get()`和`set()`方法来访问和修改字段的值。 3. **Method类**:表示类的方法,可以用来调用对象的任何方法,...

    Java反射机制说明

    通过`getDeclaredField`和`getDeclaredMethod`可以获取私有成员,然后使用`setAccessible(true)`开启访问权限,从而在运行时操作私有成员。 4. **泛型擦除后的类型安全**:由于Java的泛型在编译后会被擦除,反射...

    pdf反射机制-java

    4. AOP(面向切面编程):反射机制是实现AOP的关键技术之一,例如Spring框架中的代理模式就是基于反射实现的。 5. 测试:在单元测试中,反射可以用于访问私有方法和属性,以便进行全面的测试。 6. 序列化和反序列...

    java反射机制详解

    8. **通过反射机制调用某个类的方法**: ```java Method method = clazz.getMethod("methodName", parameterTypes); Object result = method.invoke(obj, parameters); ``` 9. **通过反射机制操作某个类的属性...

    java反射机制PPT

    此外,由于反射可以访问私有成员和调用非公开的方法,如果不加以控制,可能会破坏封装性,增加代码的复杂性和潜在的安全风险。 代理模式是设计模式中的一种,主要用来在不修改原有对象的情况下,为对象添加额外功能...

    Java反射机制的实现详解

    Java反射机制是Java语言提供的一种强大的工具,允许程序在运行时检查并操作类和对象的内部属性。通过反射,开发者可以在程序执行过程中动态地创建对象并调用它们的方法,这大大增强了代码的灵活性和可扩展性。在Java...

    java语言反射与动态代理学习笔记

    反射机制使程序能够在运行时获取类的所有成员变量和方法信息,包括私有成员,这对于动态调用方法或设置/获取属性非常有用。 **1.4 调用任意对象的方法** 通过反射,可以调用对象的任何方法,包括私有方法,这在...

    Java反射机制概述.pdf

    - **框架和库**:许多框架和库都广泛使用反射机制来实现各种高级特性,例如依赖注入和代理模式。 - **运行时类型检查**:开发者可能需要根据运行时获取到的对象类型来执行不同的操作,此时反射机制可以用来进行类型...

    反射机制的文档

    3. **判断任意一个类所具有的成员变量和方法**:可以通过反射访问类的私有成员。 4. **调用任意一个对象的方法**:即使该方法是私有的也能通过反射调用。 5. **生成动态代理**:用于实现面向接口编程中的动态代理...

    Java反射机制Demo

    ### Java反射机制详解 ...在非必要情况下,避免使用反射机制,优先考虑其他设计模式和编程技巧。 以上是关于Java反射机制的基本概念、用法和示例解析,希望能帮助你更好地理解和应用这一重要的Java特性。

    java反射机制

    反射机制在单例模式、工厂模式、策略模式等设计模式中有重要应用,如静态内部类单例模式、动态代理等。 7. **注意事项**: 使用反射时应谨慎,避免滥用,因为过多的反射操作可能使代码变得复杂且难以维护。同时,...

    候捷谈Java反射机制

    - **动态代理**:基于反射机制可以实现代理模式,用于创建动态代理类,以便于实现AOP(面向切面编程)等功能。 - **框架开发**:许多框架,如Spring、Hibernate等,都大量使用了反射机制来实现依赖注入等功能。 - **...

    Java反射机制

    9. **设计模式应用**:反射机制常用于设计模式,如工厂模式(动态创建对象)、策略模式(动态选择算法)和代理模式(动态创建代理类)。 10. **Spring框架中的反射**:在Spring框架中,反射机制被广泛用于依赖注入...

    JAVA中的反射机制共6页.pdf.zip

    12. **反射与设计模式**: 反射机制与工厂模式、策略模式、装饰器模式等设计模式结合,可以实现更灵活的代码结构,如运行时动态选择实现策略。 13. **注意事项**: 使用反射需谨慎,避免滥用,因为反射操作可能导致...

    反射与动态代理PPT结束的很详细

    动态代理是Java反射机制的一个重要应用,主要用于实现设计模式中的代理模式。在Java中,动态代理有两种实现方式:JDK动态代理和CGLIB动态代理。 1. **JDK动态代理**:基于接口实现,需要目标类实现至少一个接口。...

    Java反射和动态代理实例

    可以学习如何通过Java的反射机制实例化对象、调用对象的方法、操作对象的私有成员变量、改变数组中的某项的值、改变数组大小等;可以学习Java的动态代理模式、学习Java工厂模式以及如何将工厂模式与属性文件相结合。

    Java语言的反射.pdf

    在Java中,代理模式通常与反射机制结合使用,分为静态代理和动态代理两种。 ##### 10.3.1 静态代理类 静态代理是在编译期就定义好的代理类,它与被代理的类通常具有相同的接口。当需要调用目标对象的方法时,可以...

    java反射.pdf

    ### Java反射机制详解 #### 一、什么是Java反射? Java反射是Java编程语言的一个特性,它允许运行时检查和操作程序结构(类、字段、方法等)。反射的主要用途包括但不限于:动态实例化对象、访问私有成员、调用...

Global site tag (gtag.js) - Google Analytics