У меня есть требование заменить частный метод 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, но есть ли какое-нибудь решение этой проблемы весной ..
Вам нужно определить 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>
Зачем тебе это нужно? Я думаю, вам может потребоваться использовать AspectJ для перехвата вызовов частного метода и вместо этого вызвать вашу замену ... Это может помочь: stackoverflow.com/questions/15093894/…
Боюсь, вы не можете этого сделать, я считаю, что метод должен быть защищенным или публичным.
что я уже определил, все еще не работает. Я прошу изменить модификатор доступа метода с частного на общедоступный, чтобы я мог заменить метод с помощью метода replacer.