如何在Java中实现对象代理或类代理?

时间:2015-07-16 13:16:52

标签: java spring proxy-classes dynamic-class-loaders proxy-object

我需要在项目中扩展.class文件,并且需要覆盖一个简单的方法。考虑我在一些.jar包中有类A.现在我想覆盖类A的test()方法。我使用创建A的子类B并覆盖它来做它。 现在在我的应用程序包中(它是.jar)为类A创建了对象。这个对象调用了类A的方法。但我想调用类B方法。

我的想法是在整个应用程序中代理对象创建。每当在那时创建A类的obj时,我想要一些配置来创建B类和B类的对象。移交给A级发起人。

请帮助我实施这种机制。

2 个答案:

答案 0 :(得分:0)

只有当构造函数私有时,才能阻止或控制类实例化。

如果您不能覆盖原始基类并且想要代理它,则需要一个工厂并建议程序员使用工厂而不是直接调用基类的构造函数。

在工厂代码中,您可以返回一个作为基类代理的子类。

  

请记住,这只是一个建议。你不能阻止程序员   使用公共构造函数手动创建类的实例。

答案 1 :(得分:0)

以下是一种简单的方法(使用类型转换),通过它我们可以使用Parent类对象来调用Child类方法:

package testA;

public class A 
{

    public static void main(String[] args) 
    {
        System.out.println("Hello World!");
    }

    public String aMethod(){
        System.out.println("Calling aMethod");
        return "aMethod";
    }
}



package testB;
import testA.*;

public class B extends A
{

    public static void main(String[] args) 
    {
        System.out.println("Hello World!");
        A aClass = new B();
        aClass.aMethod();
        ((B)aClass).bMethod();
    }

    public String bMethod(){
        System.out.println("calling B method");
        return "bMethod";
    }
}