spring的方法注入

本文介绍了Spring框架中的两种方法注入方式:replaced-method和lookup-method。这两种方式都通过CGLIB生成子类实现方法替换,但前者能替换任意方法,后者仅适用于有返回值的方法,并需特定bean作为返回值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      spring依赖注入中除了构造器注入和settings注入以外还有一种方法注入。但是这种方式不常用,我也是最近翻书才回想起有这种用法,那么顺便把代码贴上来。

package mislay;

import java.lang.reflect.Method;

import org.springframework.beans.factory.support.MethodReplacer;

public class ReplaceMethodBean implements MethodReplacer {

	@Override
	public Object reimplement(Object obj, Method method, Object[] args)
			throws Throwable {
		return "hello";
	}
	
}

 

 

package mislay;

public class TestBean {
	public String getContent() {
		return "大家好";
	}
}

 

package mislay;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test {

	public static void main(String[] args) {
		ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
		
		TestBean bean1 = (TestBean) context.getBean("testBean1");
		System.out.println(bean1.getContent());
		System.out.println(bean1.getClass());
		
		
		TestBean bean2 = (TestBean) context.getBean("testBean2");
		System.out.println(bean2.getContent());
		System.out.println(bean2.getClass());
		
		((AbstractApplicationContext) context).registerShutdownHook();
	}
}



 

<?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-2.0.xsd">

	<bean id="testBean1" class="mislay.TestBean">
			<replaced-method name="getContent" replacer="replaceBean"/>
	</bean>
	
	<bean id="testBean2" class="mislay.TestBean">
		<lookup-method bean="helloString" name="getContent"/>
	</bean>
	
	<bean id="replaceBean" class="mislay.ReplaceMethodBean"/>
	<bean id="helloString" class="java.lang.String">
		<constructor-arg value="hello again"/>
	</bean>
</beans>

 

 

总结下,这两种方法注入实质上都是通过CGLIB生成需要替换方法的Bean的子类来实现的。两者区别在于:

  1. replace method 可以替换任何方法,而lookup method不能替换没有返回值的方法,因为lookup-method这个标签需要一个bean来做为返回值
  2. replace method这种方式必须通过实现了MethodReplacer这个接口的Bean来做替换.而loopup-method则不需要.框架自动处理了这一部分
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值