方法替换 ‹replaced-method›

Exisi 2022-06-28 07:45:38
Categories: Tags:
  • 可以实现方法主体或返回结果的替换,用于动态替换原有的业务逻辑

 

参数

描述

name

methodbeanClass中的一个方法,可以不是抽象方法

replacer

bean标签实例化对象的对应的id

示例

  • applicationContext.java

<?xml version="1.0" encoding="utf-8"?>

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd" default-lazy-init="true">

  <description>bean配置</description>

  <bean id="myBean" class="com.zzr.web.test.MyBean">

    <replaced-method name="display" replacer="replacer" />

  </bean>

  <bean id="replacer" class="com.zzr.web.test.MyBeanReplacer" />

</beans>

 

 

  • Bean.java

public class MyBean {

        public void display(){

            System.out.println("我是原来的方法");

        }

 }

 

 

  • MyBeanReplacer.java

//继承MethodReolacer中的reimplement方法进行替换准备

public class MyBeanReplacer implements MethodReplacer{

        @Override

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

            System.out.println("我替换了原来的方法");

            return null;

        }

}

 

 

  • Test.java

public class Main {

        public static void main(String[] args) {

            BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("bean.xml"));

            MyBean myBean = (MyBean) beanFactory.getBean("myBean");

            myBean.display();

        }

}

 

运行结果:

 

我替换了原来的方法

 

  • 可以在 <replaced-method/> 元素中使用一个或多个 <arg-type/> 元素来指示要覆盖的方法的方法签名。仅当方法重载且类中存在多个变体时,才需要对参数签名。为了方便起见,参数的类型字符串可以是完全限定类型名称的子字符串。例如,以下所有都匹配 java.lang.String

 

  • java.lang.String
  • String
  • Str

 

  • 因为参数的数量通常足以区分每个可能的选择,所以通过仅键入与参数类型匹配的最短字符串,此快捷方式可以节省很多输入

 

  • <replaced-method> 有以下子标签:

子标签

说明

<arg-type>

在方法重载的情况下标识被替换方法的参数

参数

描述

match

方法所匹配的字符

示例

<bean id="myValueCalculator" class="x.y.z.MyValueCalculator">

    <!-- arbitrary method replacement -->

    <replaced-method name="computeValue" replacer="replacementComputeValue">

        <arg-type>String</arg-type>

    </replaced-method>

</bean>

 

<bean id="replacementComputeValue" class="a.b.c.ReplacementComputeValue"/>

 

 

 

来自 <https://www.docs4dev.com/docs/zh/spring-framework/5.1.3.RELEASE/reference/core.html#beans>