1.ioc和di的概念
ioc:inverseofcontrol,控制反转,将对象的创建权反转给spring。
di:dependencyinjection,依赖注入,在spring框架负责创建bean对象时, 动态的将依赖对象注入到bean组件中。
2.属性的set方法注入值
编写持久层orderdao及其实现类:
package com.qcby.dao.impl;
import com.qcby.dao.orderdao;
public class orderdaoimpl implements orderdao {
@override
public void saveorder() {
system.out.println("持久层:保存订单........");
}
}
package com.qcby.dao;
public interface orderdao {
void saveorder();
}业务层orderservice及其实现类:
package com.qcby.service.impl;
import com.qcby.dao.orderdao;
import com.qcby.service.orderservice;
public class orderserviceimpl implements orderservice {
//提供该属性的set方法,ioc容器底层通过属性的set方法注入值
private orderdao orderdao;
public void setorderdao(orderdao orderdao) {
this.orderdao = orderdao;
}
//消息
private string msg;
//年龄
private int age;
public void setmsg(string msg) {
this.msg = msg;
}
public void setage(int age) {
this.age = age;
}
@override
public void saveorder() {
system.out.println("业务层:保存订单:"+msg+" - "+age);
orderdao.saveorder();
}
}
package com.qcby.service;
public interface orderservice {
void saveorder();
}测试方法:
/**
* 测试di注入
*/
@test
public void testdi(){
applicationcontext context = new classpathxmlapplicationcontext("applicationcontext.xml");
//获取到了oderservice的bean,这个bean里面的信息在配置文件里面配置好了
orderservice orderservice = (orderservice) context.getbean("os");
orderservice.saveorder();
}运行:

流程分析:
spring读取配置文件后,会首先创建orderdaoimpl,以od为键存入容器
<bean id="od" class="com.qcby.dao.impl.orderdaoimpl"/>
然后创建orderserviceimpl
<bean id="os" class="com.qcby.service.impl.orderserviceimpl">
<!--找到orderdao的setorderdao方法,把这个bean注入到os里面-->
<property name="orderdao" ref="od"/>
<!--给orderserviceimpl赋值,也是通过set方法赋值-->
<property name="msg" value="你好"/>
<property name="age" value="19"/>
</bean>通过无参构造方法创建orderserviceimpl实例,再通过setorderdao、setmsg和setage方法来获取值,也就是依赖注入
测试代码首先读取配置文件(第一行代码),获取到了orderserviceimpl这个bean(第二行代码),最后调用对象的saveorder方法。
3.属性的构造方法注入值
新建car类
package com.qcby.eneity;
public class car {
//名称
private string name;
//金额
private string money;
public car() {
}
public car(string name, string money) {
this.name = name;
this.money = money;
}
@override
public string tostring() {
return "car{" +
"name='" + name + '\'' +
", money='" + money + '\'' +
'}';
}
}在配置文件当中配置:
<!--构造方法注入值-->
<bean id="car" class="com.qcby.eneity.car">
<constructor-arg name="name" value="福特"/>
<constructor-arg name="money" value="1000000"/>
</bean>测试方法:
/**
* 测试构造方法注入
*/
@test
public void testconstructor(){
applicationcontext context = new classpathxmlapplicationcontext("applicationcontext.xml");
car car = (car) context.getbean("car");
system.out.println(car);
}运行:

constructor-arg是构造器参数,用于构造方法注入,name是参数名字,value是参数的值
4.数组,集合(list,set,map),properties 等的注入
新建collectionbean类
package com.qcby.eneity;
import java.util.arrays;
import java.util.list;
import java.util.map;
import java.util.properties;
public class collectionbean {
//数组
private string[]strs;
public void setstrs(string[]strs){
this.strs=strs;
}
private list<string> list;
public void setlist(list<string>list){
this.list=list;
}
private map<string,string> map;
public void setmap(map<string,string>map){
this.map=map;
}
private properties properties;
public void setproperties(properties properties){
this.properties=properties;
}
@override
public string tostring(){
return"collectionbean{"+
"strs="+ arrays.tostring(strs)+
",list="+list+
",map="+map+
",properties="+properties+
'}';
}
}配置bean
<!--给集合属性注入值-->
<bean id="collectionbean" class="com.qcby.eneity.collectionbean">
<property name="strs">
<array>
<value>美美</value>
<value>凤凤</value>
</array>
</property>
<property name="list">
<list>
<value>熊大</value>
<value>熊二</value>
</list>
</property>
<property name="map">
<map>
<entry key="aaa" value="老王"/>
<entry key="bbb" value="小王"/>
</map>
</property>
<property name="properties">
<props>
<prop key="username">root</prop>
<prop key="password">123456</prop>
</props>
</property>
</bean>测试代码
/**
* 引用类型的注入
*/
@test
public void testreferencetype(){
applicationcontext context = new classpathxmlapplicationcontext("applicationcontext.xml");
collectionbean collectionbean = (collectionbean) context.getbean("collectionbean");
system.out.println(collectionbean);
}结果:

到此这篇关于spring的di依赖注入(配置文件方式)的文章就介绍到这了,更多相关spring di依赖注入内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论