- 可以实现方法主体或返回结果的替换,用于动态替换原有的业务逻辑
参数 |
描述 |
name |
method是beanClass中的一个方法,可以不是抽象方法 |
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> |
在方法重载的情况下标识被替换方法的参数
|
示例
<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>