1、构造器注入
(1)创建实体类
package com.ssm.spring.pojo;
public class Role {
private Long id;
private String roleName;
private String note;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getRoleName() {
return roleName;
}
public void setRoleName(String roleName) {
this.roleName = roleName;
}
public String getNote() {
return note;
}
public void setNote(String note) {
this.note = note;
}
public Role(String roleName, String note) {
this.roleName = roleName;
this.note = note;
}
@Override
public String toString() {
return "Role{" +
"id=" + id +
", roleName='" + roleName + '\'' +
", note='" + note + '\'' +
'}';
}
}
可以看到实体类中的构造函数是有参构造函数,不能用无参构造函数创建对象。
(2)使用构造器注入的配置
<bean id="role1" class="com.ssm.spring.pojo.Role">
<constructor-arg index="0" value="总经理"/>
<constructor-arg index="1" value="公司管理者"/>
</bean>
id:bean的名字
class:实体类的位置
constructor-arg:用于定义类构造方法的参数,index为参数的位置(从0开始)value为参数的值。
(3)编辑测试代码测试
@Test
public void test6(){
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("spring-cfg.xml");
Role role1 = (Role) ctx.getBean("role1");
System.out.println(role1);
ctx.close();
}
使用getbean获取id=role1的bean实例,输出该实例,输出结果如下,依赖注入成功。
2、setter注入
setter注入是Spring中最主流的注入方式,该方法是由Bean中所定义的setter方法实现的。
实现:首先把Bean中的构造参数声明为无参参数,然后通过setter注入,设置对应的值。这一步相当于首先使用无参构造函数初始化,然后使用setter方法对参数设置值。
(1)实体类代码
package com.ssm.spring.pojo;
public class Role {
private Long id;
private String roleName;
private String note;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getRoleName() {
return roleName;
}
public void setRoleName(String roleName) {
this.roleName = roleName;
}
public String getNote() {
return note;
}
public void setNote(String note) {
this.note = note;
}
@Override
public String toString() {
return "Role{" +
"id=" + id +
", roleName='" + roleName + '\'' +
", note='" + note + '\'' +
'}';
}
}
与构造方法注入的区别在于该实体类使用的无参构造函数
(2)使用setter的配置
<bean id="role1" class="com.ssm.spring.pojo.Role">
<property name="roleName" value="总经理"/>
<property name="note" value="公司管理者"/>
</bean>
property元素中name为bean中的属性(属性指set方法中的那个名字,例如setName()则属性为name,不是成员变量名字!不是成员变量名字!不是成员变量名字!虽然他们大部分情况下一样)
value : 属性值
(3)测试代码测试
@Test
public void test6(){
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("spring-cfg.xml");
Role role1 = (Role) ctx.getBean("role1");
System.out.println(role1);
ctx.close();
}
测试结果如下
测试成功