上一节我们一起学习了如何通过配置文件的方式实现构造函数注入,今天我们一起来学习属性注入(又称set注入)。
ok,我这里默认你已经看过了我的上一篇文章:
浅谈Spring之依赖注入在Spring中的具体实现(如果你没有看过,推荐你去看一看哦)
所有的步骤都和依照上一篇的操作:
这里只需要修改几个地方:
1、在com.ironman.service.impl文件夹下新建一个FilmServiceImpl2的类文件
package com.ironman.service.impl;
import com.ironman.service.IFilmService;
import java.util.Date;
public class FilmServiceImpl2 implements IFilmService {
private String actorname;
private Integer actorage;
private Date datetime;
public void saveFilm() {
System.out.println("电影拍摄完成了!"+"\n"+"演员名称"+actorname+"\n"+"演员年龄"+actorage+"\n"+"程序编译日期"+datetime+"\n");
}
/**
这里我们利用的generate功能生成三个对象的setter方法
*/
public void setActorname(String actorname) {
this.actorname = actorname;
}
public void setActorage(Integer actorage) {
this.actorage = actorage;
}
public void setDatetime(Date datetime) {
this.datetime = datetime;
}
}
2、在配置文件中将刚才构造函数注入的方式注释掉(选中按Ctrl+/)填入如下代码:
<!--配置一个日期对象 -->
<bean id ="now" class = "java.util.Date"></bean>
/**
set方法注入(更常用)
涉及的标签:property
出现的位置:bean标签的内部
标签的属性:
name:用于指定注入时所调用的set方法名称
value: 用于提供基本类型和String类型的数据
ref: 用于指定其他的bean类数据,它指的就是在Spring的IOC核心容器中出现过的bean对象
*/
<bean id = "filmService2" class="com.ironman.service.impl.FilmServiceImpl2">
<property name = "actorname" value = "RobertDowneyJr"></property>
<property name="actorage" value = "55"></property>
<property name="datetime" ref="now"></property>
</bean>
3、然后在我们的Client文件中将我们要注入的对象的Id改为filmservice2
ok,运行即可:
ok,这里我就要问一问小伙伴们了啊?还记不记得我们在第一讲:
浅谈Spring之控制反转和依赖注入的理解中所说的构造函数注入和属性注入的区别了呢?(想一想。。。)
是不是因为演员不可能一直待在片场,他可能要赶好几部戏,在各个片场之间穿梭。我们不可能让导演一直把演员拴在片场。而只是在需要演员出场拍戏的时候才让演员出场啊!
因此:
构造函数注入是在获取bean对象时就将数据注入。
属性注入是创建对象不同时将数据注入进去,而是在我们需要用到这个对象时(即需要这个演员出场时)才将数据注入。
因此对比这两种方式:我们是不是会更喜欢属性注入这种更加灵活的注入方式啊。
没错!属性注入(setter注入) 是我们更加 常用的一种方式!
ok,本节到这里就完成了!(欢迎点赞转发评论!o!,如你发现错误,还烦请指正,我们一起交流一起进步!)