Spring 自動裝配;方法注入


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM