`

Spring注入的方式

阅读更多

Spring依赖注入分为两种:构造函数注入和setter方法注入;、

1、构造函数注入的配置文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
	"http://www.springframework.org/dtd/spring-beans.dtd">
	
<beans>

	<bean name="userInfo" class="com.openv.impl.UserInfoImpl">
		<constructor-arg>
			<ref bean="helloWorld"/>
		</constructor-arg>
	</bean>

	<!-- 当构造函数有多个参数时,可以使用constructor-arg标签的index属性,index属性的值从0开始 -->
	<bean name="helloWorld" class="com.openv.impl.HelloWorld">
		<constructor-arg index="0">
			<ref bean="fileHello"/>
		</constructor-arg>
		<constructor-arg index="1">
			<value>I am a learner.</value>
		</constructor-arg>
	</bean>

	<!-- 使用构造子注入时,则使用constructor-arg子标签,来指定构造函数的参数 -->
	<bean name="fileHello" class="com.openv.impl.HelloStrImpl">
		<constructor-arg>
			<value>helloworld.properties</value>
		</constructor-arg>
	</bean>
	
</beans>

        在上面的这个配置文件中我们主要有3个类:

        com.openv.impl.UserInfoImpl,com.openv.impl.HelloWorld,com.openv.impl.HelloStrImpl

这三个类的构造方法分别为:

public HelloWorld(HelloStr hStr,String words){
this.hStr=hStr;
this.words=words;
}

 

public HelloStrImpl(String profilename){
		this.profilename=profilename;
	}

 

UserInfoImpl(HelloWorld helloWorld){
		this.helloWorld=helloWorld;
	}

       从结合配置文件和构造方法,可以看出下面几点:1、如果构造方法中的参数类型是标准类型如字符串、数字等,在配置文件中就使用<value></value>来作为输入的参数,如果是用户定义的类那么久需要在配置文件中使用<property><ref/></property>来作为输入的参数。2、如果构造函数中含有多个参数在<constructor-args>中添加index来说明是第几个参数,默然是从0开始的。

2、使用setter方式进行注入的配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
	"http://www.springframework.org/dtd/spring-beans.dtd">
	
<beans>

	<bean name="userInfo" class="com.openv.impl.UserInfoImpl">
		<property name="helloWorld">
			<ref bean="helloWorld"/>
		</property>
	</bean>

	<!-- 当构造函数有多个参数时,可以使用constructor-arg标签的index属性,index属性的值从0开始 -->
	<bean name="helloWorld" class="com.openv.impl.HelloWorld">
		<property name="hStr">
			<ref bean="fileHello"/>
		</property>
		<property name="words">
			<value>I am a learner.</value>
		</property>
	</bean>

	<!-- 使用构造子注入时,则使用constructor-arg子标签,来指定构造函数的参数 -->
	<bean name="fileHello" class="com.openv.impl.HelloStrImpl">
		<property name="profilename">
			<value>helloworld.properties</value>
		</property>
	</bean>
	
</beans>

          同样的我们也有三个类,名字分别为:

          com.openv.impl.UserInfoImpl,com.openv.impl.HelloWorld,com.openv.impl.HelloStrImpl

这3个类中没有显示的构造方法,但是他们三个类有一个共同的特点是:在这些类中都有setter方法,下面是这些类中参数的setter方法:

private String profilename;
	
	public void setProfilename(String profilename) {
		this.profilename = profilename;
	}

 

public void sethStr(HelloStr hStr) {
		this.hStr = hStr;
	}

	public void setWords(String words) {
		this.words = words;
	}

 

public void setHelloWorld(HelloWorld helloWorld) {
		this.helloWorld = helloWorld;
	}

       使用setter方法我们就能通过spring的注入。在配置文件中发生的主要变化就是<constructor-args>变为了<property>。

       在真正开发的过程中建议使用setter方法进行注入,setter方法注入时spring开发团队所提倡的,因为构造函数注入可能会出现下面的情况:A类依赖B类,B类依赖C类,C类又依赖A类,在使用构造函数注入时就会出现死锁,而使用setter方法进行注入就可以有效的解决这种情况。

       但是,构造函数注入存在也有他的原因,在没有setter方法的遗留代码或者没有源码的第三方类时,使用<contructor-args>是进行开发时很明智的选择。

       下面的代码是我做分析的源码

 

分享到:
评论

相关推荐

    Spring三种注入方式(三)

    本篇主要介绍Spring中的三种注入方式,包括构造器注入、设值注入和接口注入。 **一、构造器注入** 构造器注入是通过构造函数来传递依赖对象的一种方式。当类有多个构造函数时,Spring会使用带有最多参数的构造函数...

    Spring的注入方式详解

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

    Spring三种注入方式(二)

    本篇主要介绍Spring中的三种注入方式,着重讲解在"Spring三种注入方式(二)"中的内容。我们将深入探讨setter注入,这是Spring中最常见的注入方式之一。 ### 一、setter注入 setter注入是通过Spring容器调用对象的...

    spring的注入方式

    Spring提供了多种注入方式,包括set注入、构造注入和自动注入,让我们逐一深入探讨。 1. **Set注入** Set注入是最常见的注入方式,它通过setter方法来设置对象的依赖。首先,你需要在类中声明需要注入的属性,并...

    Spring中你不知道的注入方式编程开发技术共6页.pdf

    本资料“Spring中你不知道的注入方式编程开发技术共6页.pdf”深入探讨了一些不常见但实用的Spring注入方式。尽管描述中提到的文件是一个压缩包,但从其标题我们可以推测其内容可能包括以下几点: 1. **构造器注入**...

    Spring注入方式有哪些

    Spring框架是Java开发中广泛使用的依赖注入(Dependency Injection,简称DI)容器,它极大地提高了代码的可测试性和可维护性。...理解并掌握这些注入方式,对于高效地使用Spring框架进行开发至关重要。

    Spring定义bean的三种方式和自动注入

    Spring提供两种主要的自动注入方式:`byName`和`byType`,以及更推荐的`@Autowired`注解。 - `byName`:根据Bean的属性名查找相同名称的Bean进行注入。 - `byType`:如果Bean的属性类型只有一个匹配的Bean,那么...

    spring学习:依赖注入的几种方式讨论

    Spring Boot引入了一种更智能的依赖注入方式——自动配置。自动配置是通过`@EnableAutoConfiguration`注解启动的,它根据项目中的类路径和特定条件自动配置Bean。例如,如果类路径下存在`MongoClient`的jar,Spring ...

    Spring 三种依赖注入方式.doc

    Spring 三种依赖注入方式 Spring 框架中提供了多种依赖注入方式,其中最常用的三种依赖注入方式分别是接口注入、设值注入和构造函数注入。下面,我们将分别对这三种依赖注入方式进行详细的介绍和分析。 一、接口...

    spring试题(含答案)

    Spring 的依赖注入方式有 setter 注入、构造方法注入和接口注入。依赖注入的目标是在代码之外管理程序组建间的依赖关系。 1. Spring 注入方式有 setter 注入、构造方法注入和接口注入。其中,setter 注入和构造方法...

    Spring依赖注入的方式

    本文将深入探讨Spring中的依赖注入方式,包括构造器注入、设值注入和接口注入。 **一、构造器注入** 构造器注入是通过在类的构造函数中传入依赖对象来实现的。Spring容器在创建对象时,会调用带有相应依赖的构造...

    Spring三种注入方式(一)

    本篇主要介绍Spring中的三种注入方式,包括构造器注入、设值注入和接口注入。 首先,我们来看构造器注入。构造器注入是在创建对象时,通过构造器传递依赖对象。这种方式强制了对象在创建时就必须提供所有必要的依赖...

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

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

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

    要用注解注入方式,还需要在applicationContext.xml文件加入一行代码: &lt;context:component-scan base-package="Mode"&gt;&lt;/context:component-scan&gt; //表示在包mode下面的类将扫描带有@Component,@Controller,@Service...

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

    本文将深入探讨Spring中的三种依赖注入方式,并结合源码分析其工作原理。 1. **构造器注入** 构造器注入是通过构造函数来传递依赖对象的。当创建一个类的新实例时,Spring容器会调用带有所需参数的构造函数,从而...

    spring的注入方式.doc

    详细介绍spring的三种注入方式,带有实例和图片

    spring注入原理

    Spring支持两种主要的注入方式:XML配置和注解配置。随着Java的发展,注解方式逐渐成为主流,因为它更简洁、直观。在Spring中,我们通常使用`@Autowired`、`@Qualifier`、`@Resource`等注解来进行依赖注入。 - `@...

    spring注入配置文件

    spring注入配置文件,使用注解注入的

    Web服务器端在Action、dao、service之外实现spring注入

    我们在开发过程中经常会发生spring注入错误或失败的情况,其实Web服务器端在Action、dao、service包之内是很容易实现的,在这些包之外实现spring注入就不容易了,总是出错,其实根本原因是无法获得相应的spring上...

Global site tag (gtag.js) - Google Analytics