【问题标题】:Replace Private Method of Spring Bean替换 Spring Bean 的私有方法
【发布时间】:2018-09-01 16:20:34
【问题描述】:

我需要替换spring bean的私有方法,我可以通过spring replace来实现吗。

我的代码: 替换类:

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;
}

}

汽车.java

package org.websparrow.beans;

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

我的 Spring 配置:

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

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

亲爱的大家, 我已经知道我不能通过 spring 替换器替换私有方法,但是 春天有什么解决方法吗..

【问题讨论】:

    标签: spring spring-mvc spring-boot spring-ioc


    【解决方案1】:

    你需要将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/…
    【解决方案2】:

    恐怕你不能这样做,我认为该方法应该受到保护或公开。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-31
      • 2021-12-25
      • 1970-01-01
      • 1970-01-01
      • 2015-10-28
      • 1970-01-01
      • 2011-01-01
      相关资源
      最近更新 更多