Spring bean的三种注入方式

Spring的一个重要原理就是IOC(Inverse Of Control),即控制反转。IOC就是一种将组件依赖关系的创建和管理置于程序外部的技术,在Spring中Bean组件的实例化和依赖关系的管理控制都由Spring容器负责,对象与对象之间的关系可以简单的理解为对象之间的依赖关系:在 类 A 需要类 B 的一个实例来进行某些操作时,比如在类 A 的方法中需要调用类 B 的方法来完成功能,叫做类 A 依赖于类 B。依赖注入(DI:Dependency Injection) :两个对象之间的依赖关系在程序运行时由外部容器动态的注入依赖行为方式称为依赖注入
(DI) ,DI 是 IOC 的一种形式。IOC能够实现:你的类不会去查找或是实例化它们所依赖的类。控制恰好是反过来的,容器会设置这种依赖关系。使用 IoC 常常使代码更加简洁,并且为相互依赖的类提供一种很好的方法。

依赖注入的三种实现类型:构造器注入、Setter注入和接口注入。

1、构造器注入

依赖关系是通过类构造函数建立的,容器通过调用类的构造方法将其所需的依赖关系注入其中,例如在Spring的XML配置文件中,在构造Bean的时候使用<constructor-arg>元素来设置其依赖的对象。构造期间完成一个完整的、合法的对象。所有依赖关系在构造函数中集中呈现。依赖关系在构造时由容器一次性设定,组件被创建之后一直处于相对“不变”的稳定状态。只有组件的创建者关心其内部依赖关系,对调用者而言,该依赖关系处于“黑盒”之中。

<bean id="sonnet29" class="lucien.Sonnet29" />

<!-- 构造器注入 -->
<bean id="poeticDuke" class="lucien.PoeticJuggler">
	<constructor-arg value="15" />
	<constructor-arg ref="sonnet29" />
</bean>

2、Setter方法注入

JavaBean的属性通常都是私有的,拥有一组存取器即:setXXX()和getXXX(),Spring就是通过使用属性的set方法来实现setter注入的。对于习惯了传统 javabean 开发的程序员,通过 setter 方法设定依赖关系更加直观。如果依赖关系较为复杂,那么构造注入模式的构造函数也会相当庞大,而此时setter注入模式则更为简洁。

package lucien;

public interface Instrument {
	public void play();
}
package lucien;

public class Saxophone implements Instrument {

	@Override
	public void play() {
		// TODO Auto-generated method stub
		System.out.println("Saxophone");
	}

}
package lucien;

public class Instrumentalist implements Performer {
	private String song;
	private Instrument instrument;

	public String getSong() {
		return song;
	}

	public void setSong(String song) {
		this.song = song;
	}

	public Instrument getInstrument() {
		return instrument;
	}

	public void setInstrument(Instrument instrument) {
		this.instrument = instrument;
	}

	@Override
	public void perform() {
		// TODO Auto-generated method stub
		System.out.println("playing " + song + " : ");
		instrument.play();
	}

}

对应的配置文件部分如下:

		<bean id="saxophone" class="lucien.Saxophone"/><bean id="Tim" class="lucien.Instrumentalist"><property name="song" value="Jingle Bells"/><property name="instrument" ref="saxophone"/></bean>

3、接口注入

在类中,对于依赖的接口,通过具体的实现类名,动态的加载并强制转换成其接口类型。接口注入不常用。

package lucien;

public class Saxophone implements Instrument {

	@Override
	public void play() {
		// TODO Auto-generated method stub
		System.out.println("Saxophone");
	}

}
package lucien;

public class Instrumentalist implements Performer {
	private String song;
	private Instrument instrument;

	public String getSong() {
		return song;
	}

	public void setSong(String song) {
		this.song = song;
	}

	@Override
	public void perform() {
		// TODO Auto-generated method stub
		System.out.println("playing " + song + " : ");

		try {
			instrument = (Instrument) Class.forName("lucien.Saxophone").newInstance();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		instrument.play();
	}

}
时间: 2024-11-04 15:46:43

Spring bean的三种注入方式的相关文章

Spring IOC 中三种注入方式

项目错误知识点记录 正文 最近在项目的时候,用到Spring框架,Spring框架提供了一种IOC的自动注入功能,可以很轻松的帮助我们创建一个Bean,这样就省的我们四处写new Object()这样的代码了.IOC提供了三种注入方式,接口注入,set方法注入以及构造器注入,三种注入方式使用起来都很easy,具体的使用方法网上都有很多,大家可以自行搜索百度... 那天当我使用接口注入的时候,发现IDEA给我一个警告(以前也有这样的警告,只不过我没太注意),看了看是让我采用构造器注入方式.这就让我

Spring IOC的三种注入方式

Spring IOC三种注入方式: 1.    接口注入 2.    getter,setter方式注入 3.    构造器注入 对象与对象之间的关系可以简单的理解为对象之间的依赖关系:A类需要B类的一个实例来进行某些操作,比如在A类的方法中需要调用B类的方法来完成功能,叫做A类依赖于B类.控制反转是一种将组件依赖关系的创建和管理置于程序外部的技术,由容器控制程序之间的关系,而不是由代码直接控制. 1.接口注入 public class ClassA {  private InterfaceB

Spring常用的三种注入方式

好文要收藏,摘自:https://blog.csdn.net/a909301740/article/details/78379720 Spring通过DI(依赖注入)实现IOC(控制反转),常用的注入方式主要有三种:构造方法注入,setter注入,基于注解的注入. 构造方法注入先简单了解一下测试项目的结构,用maven构建的,四个包: entity:存储实体,里面只有一个User类dao:数据访问,一个接口,两个实现类service:服务层,一个接口,一个实现类,实现类依赖于IUserDaote

Spring bean的三种创建方式

1.创建Spring工程 使用eclipse创建一个Spring工程,一个简单的方法就是先创建一个Java工程,然后将Spring的Jar包全部放入到工程里面即可开始编写基于Spring框架的程序.Spring的Jar包可以从github上的源码中取得,下载地址是:https://github.com/spring-projects/spring-framework. 下面是在学习<Spring实战>时创建的一个Spring工程,其目录结构如下: 在Spring中,创建应用对象之间协作关系的行

spring ioc三种注入方式

spring ioc三种注入方式 IOC ,全称 (Inverse Of Control) ,中文意思为:控制反转 什么是控制反转? 控制反转是一种将组件依赖关系的创建和管理置于程序外部的技术. 由容器控制程序之间的关系,而不是由代码直接控制 由于控制权由代码转向了容器,所以称为反转 接口注入 Setter 注入 构造器注入 三种依赖注入方式的比较 : 接口注入: 接口注入模式因为历史较为悠久,在很多容器中都已经得到应用.但由于其在灵活性.易用性上不如其他两种注入模式,因而在 IOC 的专题世界

Spring三 Bean的三种创建方式

创建Bean的三种方式在大多数情况下,Spring容器直接通过new关键字调用构造器来创建Bean实例,而class属性指定Bean实例的实现类,但这不是实例化Bean的唯一方法.实际上,Spring支持使用以下三种方式来创建Bean:(1)调用构造器创建Bean(2)调用静态工厂方法创建Bean(3)调用实例工厂方法创建Bean一 构造器创建Bean实例如果不采用构造注入,Spring底层会调用Bean类的无参数构造器来创建实例,因此该类必须要提供无参数的构造器,并且class属性的值就是该B

Spring的三种注入方式

据说不懂spring的程序员就相当于不会Java,于是最近一段时间并行学习下spring框架.先学习总结下spring的IoC的五种注入方式. 这里我想象的场景是这样的:士兵和他的武器的故事.这个是我目前的结构图: Human和Weapon是两个接口,Gun和Solder分别是实现了上面两个接口的类,其中,由于Solder需要Gun而形成了对Gun类的依赖 上面的代码分别为: Weapon接口 public interface Weapon { public void function(); }

Spring中装配bean的三种主要方式

1.自动化配置 package com.springinaction.test; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @Configuration//告诉spring这是一个配置类 @ComponentScan//扫描组件 public class CDPlayerConfig { } pa

Spring Security Encryption三种加密方式

Encryption One-way encryption       单项加密,客户端将要传递的值先加密(使用特定的加密方法),将原值和加密好的值传递过去,服务器端将原始数据也进行一次加密(两者加密的方法一致),最后匹配连个加密后的值是否相等.相等就通过,否则不通过.   Symmetric encryption     双向,既能加密又能解密. Public key cryptography  公钥和秘钥,公钥向外面公开,秘钥只有自己知道,传输的数据使用公钥加密,得到后使用秘钥解密.