您的位置:首页 > 编程语言 > Java开发

spring依赖注入方式

2010-09-22 09:55 363 查看
一、依赖注入简介

依赖注入背后的基本原理是对象之间的依赖关系,可以通过以下几种方式来实现:构造器的参数、工厂方法的参数。分别是由构造函数或者工厂方法来创建对象并且设置属性。因此,容器的主要工作可以理解为创建bean时注入那些依赖关系。相对于由bean自己来控制其实例化、直接在构造中指定依赖关系这种自主控制依赖关系注入的方式来说,是从根本上发生了倒转,因此也称为控制反转。

依赖注入主要有两种方式,即构造器注入和setter注入。

1、构造器注入:

基于构造器的注入是通过调用带参数的构造器来实现的,每个参数代表一个依赖。

实例:

先创建一个对象bean

public class HelloWorld
{
private String msg;

//需要默认无参构造
public HelloWorld(){};

public HelloWorld(String msg){
this.msg = msg;
}

public String getMsg(){
return msg;
}

public void setMsg(String msg){
this.msg = msg;
}
}


在修改配置文件applicationContext.xml,实例化bean

<bean id="hello" class="com.spring.demo.HelloWorld">
<constructor-arg index="0">
<value>HelloWorld!</value>
</constructor-arg>
</bean>


最后测试是否能得到注入的bean,并打印出对象的属性。

public static void main(String[] args){
//读取配置文件,获得BeanFactory
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

BeanFactory factory = context;

HelloWorld hello = (HelloWorld)factory.getBean("hello");

System.out.println(hello.getMsg());
}


2、Setter注入

通过调用无参构造器或者无参static工厂方法实例化bean之后,调用该bean的setter方法,即可实现基于setter的依赖注入

创建一个对象

public class HelloWorld
{
private String msg;

public String getMsg(){
return this.msg;
}

public void setMsg(String msg){
this.msg = msg;
}
}


修改配置文件applicationContext.xml,实例化bean

<bean id="helloBean" class="com.spring.demo.HelloWorld">
<property name="msg" value="Hello World !"/>
</bean>


测试类,获取注入的bean

public static void main(String[] args){
//读取配置文件,实例化IOC容器
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

BeanFactory factory = context;

HelloWorld hello = (HelloWorld)factory.getBean("helloBean");

System.out.println(hello.getMsg());
}


总结:

处理bean依赖关系通常按照以下步骤进行。

1、根据定义bean的配置创建并初始化BeanFactory实例

2、每个bean的依赖将以属性、构造器参数、或静态工厂方法参数的形式出现。当这些bean被实际创建时,这些依赖也将会提供给该bean。

3、每个属性或构造器参数既可以是一个实际的值,也可以是对该容器中另一个bean的引用。

4、每个指定的属性或者是构造器参数值必须能够被转换成特定的格式或构造参数所需的类型。

spring会在容器被创建时验证容器中每个bean的配置,包括验证那些bean所引用的属性是否指向一个有效地bean。在bean被实际创建之前,bean的属性并不会被设置。伴随着bean被实际创建,作为该bean的依赖bean以及依赖bean的依赖bean也将被创建和分配。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: