通過配置defalut—autowire屬性,Spring IOC容器可以自動為程序注入Bean;默認是no(不啟用自動裝配)。
default—autowire的類型有:
byName:通過名稱自動進行匹配
byType:通過屬性自動進行匹配
示例如下:
一個實體類people
public class People{
private int id;
private String name;
private int age;
private Dog dog;
}
beans.xml配置:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd"
default-autowire="byName">
<!-- byName通過屬性名,byType通過類型只要類型與屬性類型相同就可以自動裝配 -->
<bean id="dog" class="com.maya.model.Dog">
<property name="name" value="jack"></property>
</bean>
<bean id="dog1" class="com.maya.model.Dog">
<property name="name" value="tom"></property>
</bean>
<!-- 在這里不需要,手動進行注入bean,因為people中的屬性名是dog,那么它會自動裝配id是dog的類 -->
<bean id="people1" class="com.maya.model.People">
<property name="id" value="1"></property>
<property name="name" value="小明"></property>
<property name="age" value="15"></property>
</bean>
</beans>
建議:自動裝配機制慎用,它屏蔽了裝配細節,容易產生潛在的錯誤;
方法注入:
Spring 管理的bean的作用域默認是單例的singleton; 但是可以通過配置prototype,實現多例;
那么就需要用到方法注入:lookup-method
如果我想讓Spring管理的bean在我每次調用的時候都是新的,那么就需要如下配置(但是這樣做的前提條件是:我沒有手動將這條狗注入到people中)
<bean id="dog" class="com.maya.model.Dog" scope="prototype"><!-- 將scope屬性設置為prototype -->
<property name="name" value="jack"></property>
</bean>
如果將dog手動注入到了people中的話,這樣做是無法改變其單例的模式,依然會是同一條狗

