一般而言,Spring的依賴注入有三種:構造器注入、setter注入以及接口注入。本文主要講構造器注入與setter注入。
1、構造器注入
為了讓Spring完成構造器注入,我們需要去描述具體的類、構造方法並設置構造方法的對應參數。
代碼如下:
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; } public Role() { } public void run() { System.out.println("roleName:" + roleName + ";" + "note:" + note); } }
這個時候是沒有辦法利用無參的構造方法去創建對象的,為了使Spring能正確創建這個對象,需要在xml文件中加入如下bean:
<bean id="role1" class="com.ssm.chapter.pojo.Role">
<constructor-arg index="0" value="總經理" />
<constructor-arg index="1" value="公司管理者" />
</bean>
其中,constructor-arg元素用於定義類構造方法的參數,index用於定義參數的位置,而value是設置值,通過這樣定義spring便知道使用Role(String, String)這樣的構造方法去創建對象了。
2、使用setter注入
setter注入是Spring最主流的注入方式,它消除了使用構造器注入多個參數的可能性,可以把構造參數聲明為無參的,然后使用setter注入為其設置對應的值。需要注意的是,如果類中沒有構造函數,JVM會默認創建一個無參構造函數。xml代碼清單如下:
<bean id="role2" class="com.ssm.chapter.pojo.Role" >
<property name="roleName" value="高級工程師" />
<property name="note" value="重要人員" />
</bean>
接着編寫測試類即可:
ApplicationContext ctx = new ClassPathXmlApplicationContext("spring-cfg.xml"); Role role = (Role) ctx.getBean("role2"); role.run();