`

spring的方法注入

阅读更多

      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则不需要.框架自动处理了这一部分
分享到:
评论

相关推荐

    JSP开发之Spring方法注入之替换方法实现

    JSP开发之Spring方法注入之替换方法实现 Spring提供了一种替换方法实现的机制,可以让我们改变某个bean某方法的实现。打个比方我们有一个bean,其中拥有一个add()方法可以用来计算两个整数的和,但这个时候我们想把...

    spring的注入方式

    在Spring框架中,依赖注入(Dependency Injection,简称DI)是一种重要的设计模式,它使得对象间的依赖关系得以解耦,提高了代码的可测试性和可维护性。Spring提供了多种注入方式,包括set注入、构造注入和自动注入...

    关于spring boot中几种注入方法的一些个人看法

    Spring Boot 中的几种注入方法 在 Spring Boot 中,注入是一种非常重要的机制,用于将 bean 对象注入到其他 bean 对象中,以便实现松耦合和高内聚的设计目标。下面我们将对 Spring Boot 中的几种注入方法进行详细的...

    spring依赖注入底层详解

    2. AOP:Spring的AOP框架用于在运行时动态地修改程序的行为,比如在依赖注入时,AOP代理可以在目标对象的方法调用前后插入相应的行为,如检查依赖是否已注入,或者在注入过程中执行一些额外的操作。 此外,Spring还...

    SpringSet方法注入

    我们学习了spring框架spring框架里面有3个优势第一个是轻量级的IOC也叫控制反转后来改名为DI也叫依赖注入,依赖注入里面有3中注入方法分别是set注入,构造器注入,注解注入,我传的是set注入的视频

    Spring中的方法注入

    【Spring中的方法注入】 在Spring框架中,方法注入是一种非传统的依赖注入形式,它允许我们通过调用对象的方法来设置其内部状态或执行特定操作。这种方法通常用于在对象初始化之后或者在某些特定时刻注入依赖,而...

    Spring 依赖注入 构造方法注入

    NULL 博文链接:https://zhangyulong.iteye.com/blog/856986

    第五章 Spring4 自动装配、方法注入

    在本章中,我们将深入探讨Spring框架的核心特性之一——自动装配和方法注入。Spring作为一款广泛应用的Java企业级开发框架,极大地简化了依赖管理,提高了代码的可测试性和可维护性。自动装配和方法注入是Spring实现...

    Spring依赖注入使用构造设注入demo

    在Spring框架中,依赖注入(Dependency Injection,简称DI)是一种重要的设计模式,它使得对象之间的耦合度降低,提高了代码的可测试性和可维护性。本篇将详细讲解如何使用构造器注入作为Spring依赖注入的一种方式,...

    Spring的注入方式详解

    下面我们将详细探讨Spring 中的三种注入方式:接口依赖注入(Type1)、setter/getter 注入(Type2,也称为属性注入)和构造方法注入(Type3)。 1. **接口依赖注入(Type1)** 这种注入方式相对不常见,主要适用于...

    Spring IOC之方法注入

    本文将深入探讨Spring中的一个特殊概念——方法注入,它是IOC的一种扩展形式。 方法注入允许我们在运行时通过容器调用特定的方法来传递依赖。这种方法与传统的构造器注入和属性注入相比,提供了更大的灵活性,因为...

    spring依赖注入的实现原理

    1. **setter方法注入**:Spring通过调用对象的setter方法来设置其依赖的实例。在bean配置文件中,使用`&lt;property&gt;`标签指定依赖属性。 2. **构造器注入**:Spring可以通过调用带有多个参数的构造函数来注入依赖。在...

    Spring三种注入方式(三)

    Spring会查找带有`@Autowired`注解的setter方法,并自动调用这些方法进行注入。这种方式更为灵活,可以在对象创建后随时注入依赖,但可能会导致对象在不完整的情况下被使用。示例如下: ```java public class ...

    Spring依赖注入检查.

    对于非POJO对象或者有特殊初始化需求的对象,Spring提供工厂方法来创建并注入依赖。 6. **@Qualifier注解**: 当有多个相同类型的bean,而我们需要指定具体哪一个时,`@Qualifier`注解可以用来明确指定。 7. **@...

    Spring注解注入属性

    ### Spring注解注入属性 #### 一、传统方式与注解方式对比 在Spring框架中,依赖注入(DI)是一种核心的设计模式,用于促进松耦合的系统设计,使得组件之间的依赖关系可以在运行时动态地建立,而不是在编译时硬...

    spring依赖注入例子

    Spring框架的依赖注入(Dependency Injection,简称DI)是其核心特性之一,它使得对象之间的关系在运行时由Spring容器管理,而不是硬编码在类内部。这样可以提高代码的可测试性和可维护性,因为对象的依赖关系变得松...

    Spring注释 注入方式源码示例,Annotation

    花了些时间做了一个实验,彻底弄懂了spring Annotation注入的方式。凡带有@Component,@Controller,@Service,@Repository 标志的等于告诉Spring这类将自动产生对象,而@Resource则等于XML配置中的ref,告诉spring此处...

    Spring依赖注入使用实例工厂设注入demo

    本示例将深入讲解如何在Spring中通过实例工厂方法实现依赖注入,并通过一个完整的可运行的`SpringIOCTest4`项目来展示这一过程。 首先,理解依赖注入的基本概念。依赖注入允许我们把一个对象(依赖)传递到另一个...

    spring依赖注入三种方式 测试源码

    接口注入在Spring中较少使用,主要是通过实现特定的接口,由Spring提供实现该接口的方法来注入依赖。这种方式对类的侵入性较大,但可以避免使用setter方法。在实际应用中,更多地会采用构造器注入和设值注入。 ...

    spring依赖注入

    其次,setter注入是通过在类中声明setter方法,Spring容器会调用这些方法来注入依赖。这种方式更灵活,允许在对象创建后改变依赖,但可能导致对象在不完整状态下被初始化。 为了实现这些注入,我们需要在Spring配置...

Global site tag (gtag.js) - Google Analytics