1,什么是依赖注入
依赖注入是指在 Spring IOC 容器创建对象的过程中,将所依赖的对象通过配置进行注入。我们可以通过依赖注入的方式来降低对象间的耦合度。对象之间的耦合度就是对象之间的依赖性。对象之间的耦合越高,维护成本越高,因此对象的设计应使对象之间的耦合越小越好。
依赖注入是实现控制反转的一种设计方法,并不是说依赖注入等于控制反转(Inversion of Control,IoC)。控制反转是思想,依赖注入是具体实现方式.
2,setter注入
第一步,创建一个实体类。
public class People {
private Integer pid;
String pname;
String address;
String psex;
public Integer getPid() {
return pid;
}
public String getPname() {
return pname;
}
public String getAddress() {
return address;
}
public String getPsex() {
return psex;
}
public void setPid(Integer pid) {
this.pid = pid;
}
public void setPname(String pname) {
this.pname = pname;
}
public void setAddress(String address) {
this.address = address;
}
public void setPsex(String psex) {
this.psex = psex;
}
@Override
public String toString() {
return "People{" +
"身份证号是=" + pid +
", 姓名是='" + pname + '\'' +
", 家庭地址是='" + address + '\'' +
", 性别是='" + psex + '\'' +
'}';
}
}
2,创建xml文件
在mian包下的resource包下创建
右键选择new 在选择xml configuration file 在选择 spring confile ,这是idea已经配置好的xml文件。
id是别称,且只能是唯一,容器的底层是Map集合,id是唯一,属性值则可以重复。 与test方法对应, class是对应的实体类。
<property >中的name属性值 是与实体类对应的属性,value是要赋的值。
<bean id="p" class="pojo.People">
<property name="pid" value="001"></property>
<property name="pname" value="张三"></property>
<property name="address" value="湖北武汉"></property>
<property name="psex" value="男"></property>
</bean>
3,输入结果
创建测试类
getBean中的第一个参数 则和xml中的别称一致。
@Test
public void test(){
//启动IOC容器
ApplicationContext context =
new ClassPathXmlApplicationContext("bean-xl.xml");
People people = context.getBean("p",People.class);
System.out.println(people);
}
输出的结果是
3,constructor方法注入
则需要在实体类中增加有参构造函数,否则会报错。
public People(Integer pid, String pname, String address, String psex) {
this.pid = pid;
this.pname = pname;
this.address = address;
this.psex = psex;
System.out.println("有参数的构造方法");
}
在xml的区别则是setter用的property,则构造方法也能够的是constructor-arg属性
<bean id="p1" class="pojo.People">
<constructor-arg name="pid" value="002"></constructor-arg>
<constructor-arg name="pname" value="李四"></constructor-arg>
<constructor-arg name="address" value="山东青岛"></constructor-arg>
<constructor-arg name="psex" value="男"></constructor-arg>
</bean>
在测试类表现为一致
@Test
public void test1(){
ApplicationContext context =
new ClassPathXmlApplicationContext("bean-xl.xml");
People people = context.getBean("p1",People.class);
System.out.println(people);
}
最终输出结果是:
一定要注意的是,用构造方法则在实体类中加构造方法
还有一种是基于注解的注入,这种注入比较简单。在这里不做探讨