Заменить частный метод Spring Bean

У меня есть требование заменить частный метод Spring bean, могу ли я добиться замены Spring.

Мой код: Класс-заменитель:

public class PrivateCarRep extends Car implements MethodReplacer{

@Override
public Object reimplement(Object obj, Method method, Object[] args) throws 
Throwable {

    // new property of Car.breaks() method.
    System.out.println("New  privateBreaksIs Done from Shiv");

    return obj;
}

}

Car.java

package org.websparrow.beans;

public class Car {
private void privateBreaks() {
    System.out.println("Old car break. privateBreaks");
}
}

Моя весенняя конфигурация:

<bean id = "PrivateCarRep" class = "org.websparrow.beans.PrivateCarRep"/>

<bean id = "car" class = "org.websparrow.beans.Car">
    <replaced-method name = "privateBreaks" replacer = "PrivateCarRep" />
</bean>

Приветствую всех, Я уже знаю, что не могу заменить частный метод с помощью Spring replacer, но есть ли какое-нибудь решение этой проблемы весной ..

0
0
298
2

Ответы 2

Вам нужно определить PrivateCarRep как bean-компонент:

<bean id = "privateCarReplacer" class = "com.xx.yy.zz.PrivateCarRep" />

<bean id = "car" class = "org.websparrow.beans.Car">
    <replaced-method name = "privateBreaks" replacer = "privateCarReplacer" />
</bean>

что я уже определил, все еще не работает. Я прошу изменить модификатор доступа метода с частного на общедоступный, чтобы я мог заменить метод с помощью метода replacer.

Shiv Raghuwanshi 01.09.2018 18:53

Зачем тебе это нужно? Я думаю, вам может потребоваться использовать AspectJ для перехвата вызовов частного метода и вместо этого вызвать вашу замену ... Это может помочь: stackoverflow.com/questions/15093894/…

moilejter 01.09.2018 19:14

Боюсь, вы не можете этого сделать, я считаю, что метод должен быть защищенным или публичным.

Другие вопросы по теме