当我们在开发中需要用一个类调用一个成员对象,成员对象也是被容器类托管的类对象时,那我们可以用依赖注入创建成员对象,spring就可以完成这件事,那spring怎么注入对象?下面来我们就来给大家讲解一下。

1.set注入:
这是最简单的注入方式,假设有一个SpringAction,类中需要实例化一个SpringDao对象,那么就可以定义一个private的SpringDao成员变量,然后创建SpringDao的set方法(这是ioc的注入入口):
package com.bless.springdemo.action;
public class SpringAction
{
//注入对象springDao
private SpringDao springDao;
//一定要写被注入对象的set方法
public void setSpringDao(SpringDao springDao)
{
this.springDao = springDao;
}
public void ok()
{
springDao.ok();
}
}随后编写spring的xml文件,
<!--配置bean,配置后该类由spring管理--> <bean name="springAction" class="com.bless.springdemo.action.SpringAction"> <!--(1)依赖注入,配置当前类中相应的属性--> <property name="springDao" ref="springDao"></property> </bean> < bean name = "springDao" class = "com.bless.springdemo.dao.impl.SpringDaoImpl" > </bean>
这种方式的注入是指带有参数的构造函数注入,看下面的例子,我创建了两个成员变量SpringDao和User,但是并未设置对象的set方法,所以就不能支持第一种注入方式,这里的注入方式是在SpringAction的构造函数中注入,也就是说在创建SpringAction对象时要将SpringDao和User两个参数值传进来:
public class SpringAction
{
//注入对象springDao
private SpringDao springDao;
private User user;
public SpringAction(SpringDao springDao, User user)
{
this.springDao = springDao;
this.user = user;
System.out.println("构造方法调用springDao和user");
}
public void save()
{
user.setName("卡卡");
springDao.save(user);
}
}在XML文件中同样不用
<!--配置bean,配置后该类由spring管理--> <bean name="springAction" class="com.bless.springdemo.action.SpringAction"> <!--(2)创建构造器注入,如果主类有带参的构造方法则需添加此配置--> <constructor-arg ref="springDao"></constructor-arg> <constructor-arg ref="user"></constructor-arg> </bean> < bean name = "springDao" class = "com.bless.springdemo.dao.impl.SpringDaoImpl" > </bean> < bean name = "user" class = "com.bless.springdemo.vo.User" > </bean>
解决构造方法参数的不确定性,你可能会遇到构造方法传入的两参数都是同类型的,为了分清哪个该赋对应值,则需要进行一些小处理:
下面是设置index,就是参数位置:
<bean name="springAction" class="com.bless.springdemo.action.SpringAction"> <constructor-arg index="0" ref="springDao"></constructor-arg> <constructor-arg index="1" ref="user"></constructor-arg> </bean>
另一种是设置参数类型:
<constructor-arg type="java.lang.String" ref=""/>
推荐阅读: