Как реализовать прокси объекта или прокси класса в Java?
У меня есть требование расширить файл.class в моем проекте, и мне нужно переопределить простой метод. Предположим, у меня есть класс A, который находится в некотором пакете.jar. Теперь я хочу переопределить метод test() класса AI, сделал это с помощью создания подкласса B класса A и переопределить его. Теперь в моем пакете приложения (это.jar) Объект создан для класса А. Этот объект вызывает метод класса А. Но я хочу сделать вызов метода класса В.
Моя идея заключается в том, чтобы прокси создания объекта во всем приложении. Всякий раз, когда объект класса A создается в то время, я хочу, чтобы какая-то конфигурация создавала объект класса B и передавалась классу init.
Кто-нибудь, пожалуйста, помогите мне реализовать этот тип механизма.
2 ответа
Ниже приводится простой подход (с использованием приведения типов), с помощью которого мы можем использовать объект класса 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";
}
}
Вы можете блокировать или управлять созданием класса, только если конструктор является закрытым.
Если вы не можете перезаписать исходный базовый класс и хотите проксировать его, вам нужна фабрика и посоветуйте программистам использовать фабрику вместо непосредственного вызова конструктора базового класса.
В заводском коде вы можете вернуть подкласс, который работает как прокси вашего базового класса.
Помните, что это всего лишь совет. Вы не можете блокировать программистов, чтобы они вручную создавали экземпляры класса с помощью открытого конструктора.