Я хочу, чтобы изменить объект возврата из вызова в constuctorAspectJ конструктор сила завод шаблон
ОТ
public class A {
public A(){
}
public String sayHello() {
return "hello";
}
public String foo() {
return "foo";
}
}
К
public class AWrapped extends A {
private A wrapped;
public AWrapped() {
super();
}
public AWrapped(A pWrapped) {
wrapped=pWrapped;
}
public String foo() {
return wrapped.foo();
}
public String sayHello {
return "gday mate";
}
}
Что я хочу сделать для изменения объекта, возвращаемого по вызову
A a = new A();
a.sayHello() returns "gday mate"
а является instaceof AWrapped
Я понимаю, что это обычно делается с рисунком фабрики, но я не имею доступа к коду или код, который делает новый в. И есть 1000 мест, которые могут быть созданы A.
Кажется, что Aspectj может сделать трюк, но я не знаю много об этом, если AspectJ будет делать трюк, как мне обойти бесконечную упаковку, мне нужно знать, что она была consturcted изнутри и в аспект, так что это doesnt оберните его снова.
Спасибо за помощь Jon
Если вы создадите 'новый A()' позже, он все равно скажет «привет». Угадайте, первая строка вашего последнего примера должна читать 'A a = new AWrapped()' –
Спасибо Марко, что имеет смысл, мне все еще нужно решить проблему, поэтому я собираюсь попробовать создать пользовательский загрузчик классов и посмотреть, могу ли я получить вокруг него так. Еще раз спасибо – user898333
@ user898333, это похоже на путь. Пожалуйста, после того, как вы решите проблему, разместите ее здесь как ответ на свой вопрос. – Yaneeve