spring構造器注入
阿新 • • 發佈:2019-02-17
一、宣告一個簡單的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
使用者beanpublic 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 + "]"; } }
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。
總結:構造器注入雖然很方便,但是在開發中有很多弊端,比如我不想注入某個欄位,怎麼辦。所以,在用的時候看業務在去用具體方法。
博主表述不太好,見諒