通過配置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中的話,這樣做是無法改變其單例的模式,依然會是同一條狗