spring set注入请看:http://blog.csdn.net/luckey_zh/article/details/46674113
一、声明一个简单的bean
直接来个角色bean
public class Roles {
private int id;
private String roleName;
public Roles() {
}
public Roles(int id,String roleName) {
this.id=id;
this.roleName = roleName;
}
@Override
public String toString() {
return "Users [id=" + id + ", name=" + roleName + "]";
}
}
spring配置
<bean id="roles" class="cn.com.ztz.spring.model.Roles">
<constructor-arg value="1"/>
<constructor-arg value="管理员"/>
</bean>
在运行我们的测试方法
public class SpringTest {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
Roles u = (Roles)context.getBean("roles");
System.out.println(u.toString());
}
}
得到的结果是:
Users [id=1, name=管理员]
我们可以看出来,我没有是去实例化Roles,也没有set方法。实际上spring给我们去实例化了,<constructor-arg/>给我们bean赋值了。
在实际开发中,角色下面肯定会有用户,现在我们引入用户bean
public class Roles {
private int id;
private String roleName;
//用户
private Users users;
public Roles() {
}
public Roles(int id,String roleName,Users users) {
this.id=id;
this.roleName = roleName;
this.users=users;
}
//重写toString方法,方便测试
@Override
public String toString() {
return "Roles [id=" + id + ", roleName=" + roleName + ", users="
+ users + "]";
}
}
用户bean
public class Users {
private int id;
private String name;
public Users(){
}
public Users(int id, String name) {
this.id = id;
this.name = name;
}
@Override
public String toString() {
return "Users [id=" + id + ", name=" + name + "]";
}
}
spring配置
<bean id="roles" class="cn.com.ztz.spring.model.Roles">
<constructor-arg value="1"/>
<constructor-arg value="管理员"/>
<constructor-arg ref="users"/>
</bean>
<bean id="users" class="cn.com.ztz.spring.model.Users">
<constructor-arg value="2"/>
<constructor-arg value="张三"/>
</bean>
运行测试方法,得到结果:
Roles [id=1, roleName=管理员, users=Users [id=2, name=张三]]
下面这个在Roles里面引入Users,在spring里面就要用<constructor-arg ref="users"/>去关联Users。
总结:构造器注入虽然很方便,但是在开发中有很多弊端,比如我不想注入某个字段,怎么办。所以,在用的时候看业务在去用具体方法。
博主表述不太好,见谅