詳解Java的Spring框架下bean的主動裝載方法。本站提示廣大學習愛好者:(詳解Java的Spring框架下bean的主動裝載方法)文章只能為提供參考,不一定能成為您想要的結果。以下是詳解Java的Spring框架下bean的主動裝載方法正文
Spring容器可以主動拆卸互相協作bean之間的關系,這有助於削減對XML設置裝備擺設,而無需編寫一個年夜的基於Spring運用法式的較多的<constructor-arg>和<property>元素。
主動拆卸形式:
有以下主動拆卸形式,可用於指導Spring容器應用主動拆卸依附注入。應用<bean/>元素的autowire屬性為一個bean界說中指定主動拆卸形式。
byName形式
這類形式劃定由主動拆卸屬性稱號。Spring容器在外不雅上主動線屬性設置為byName的XML設置裝備擺設文件中的bean。然後,它測驗考試婚配和接線其屬性與設置裝備擺設文件中雷同的稱號界說的Bean。假如找到婚配項,它會注入這些bean,不然,它會拋出異常。
例如,假如一個bean界說設置為主動拆卸byName的設置裝備擺設文件,它包括aspellChecker屬性(即,它有一個 setSpellChecker(...)辦法),Spring就會查找名為拼寫檢討一個bean界說,並用它來設置該屬性。依然可使用的<property>標簽連線其他屬性。上面的例子將解釋這個概念。
來創立一個Spring運用法式:
這裡是TextEditor.java文件的內容:
package com.yiibai; public class TextEditor { private SpellChecker spellChecker; private String name; public void setSpellChecker( SpellChecker spellChecker ){ this.spellChecker = spellChecker; } public SpellChecker getSpellChecker() { return spellChecker; } public void setName(String name) { this.name = name; } public String getName() { return name; } public void spellCheck() { spellChecker.checkSpelling(); } }
上面是別的一個相干的類文件SpellChecker.java內容:
package com.yiibai; public class SpellChecker { public SpellChecker() { System.out.println("Inside SpellChecker constructor." ); } public void checkSpelling() { System.out.println("Inside checkSpelling." ); } }
以下是MainApp.java文件的內容:
package com.yiibai; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class MainApp { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml"); TextEditor te = (TextEditor) context.getBean("textEditor"); te.spellCheck(); } }
以下是在正常情形下的設置裝備擺設文件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-3.0.xsd"> <!-- Definition for textEditor bean --> <bean id="textEditor" class="com.yiibai.TextEditor"> <property name="spellChecker" ref="spellChecker" /> <property name="name" value="Generic Text Editor" /> </bean> <!-- Definition for spellChecker bean --> <bean id="spellChecker" class="com.yiibai.SpellChecker"> </bean> </beans>
然則,假如要應用主動拆卸“byName”,那末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-3.0.xsd"> <!-- Definition for textEditor bean --> <bean id="textEditor" class="com.yiibai.TextEditor" autowire="byName"> <property name="name" value="Generic Text Editor" /> </bean> <!-- Definition for spellChecker bean --> <bean id="spellChecker" class="com.yiibai.SpellChecker"> </bean> </beans>
創立源代碼和bean設置裝備擺設文件完成後,讓我們運轉運用法式。假如一切順遂,這將打印以下信息:
Inside SpellChecker constructor. Inside checkSpelling.
byType形式
式劃定由主動拆卸屬性類型。Spring容器在外不雅上autowire屬性設置為byType的XML設置裝備擺設文件中的bean。然後,它測驗考試婚配和銜接一個屬性,假如它的類型有完整雷同的豆子稱號的一個婚配的設置裝備擺設文件。假如找到婚配項,它會注入這些bean,不然,它會拋出異常。
例如,假如一個bean界說設置為主動拆卸byType的設置裝備擺設文件,它包括拼寫檢討類型的aspellChecker屬性,春季查找名為拼寫檢討一個bean界說,並用它來設置該屬性。依然可使用<property>標簽接線其他屬性。上面的例子將解釋這個概念,會發明和下面的例子沒有甚麼差別,除XML設置裝備擺設文件已被更改。
異樣,來創立一個Spring運用法式解釋:
這裡是TextEditor.java文件的內容:
package com.yiibai; public class TextEditor { private SpellChecker spellChecker; private String name; public void setSpellChecker( SpellChecker spellChecker ) { this.spellChecker = spellChecker; } public SpellChecker getSpellChecker() { return spellChecker; } public void setName(String name) { this.name = name; } public String getName() { return name; } public void spellCheck() { spellChecker.checkSpelling(); } }
上面是別的一個相干的類文件SpellChecker.java內容:
package com.yiibai; public class SpellChecker { public SpellChecker(){ System.out.println("Inside SpellChecker constructor." ); } public void checkSpelling() { System.out.println("Inside checkSpelling." ); } }
以下是MainApp.java文件的內容:
package com.yiibai; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class MainApp { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml"); TextEditor te = (TextEditor) context.getBean("textEditor"); te.spellCheck(); } }
以下是在正常情形下的設置裝備擺設文件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-3.0.xsd"> <!-- Definition for textEditor bean --> <bean id="textEditor" class="com.yiibai.TextEditor"> <property name="spellChecker" ref="spellChecker" /> <property name="name" value="Generic Text Editor" /> </bean> <!-- Definition for spellChecker bean --> <bean id="spellChecker" class="com.yiibai.SpellChecker"> </bean> </beans>
然則,假如要應用主動拆卸“byType”,那末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-3.0.xsd"> <!-- Definition for textEditor bean --> <bean id="textEditor" class="com.yiibai.TextEditor" autowire="byType"> <property name="name" value="Generic Text Editor" /> </bean> <!-- Definition for spellChecker bean --> <bean id="SpellChecker" class="com.yiibai.SpellChecker"> </bean> </beans>
當創立源代碼和bean設置裝備擺設文件完成後,讓我們運轉運用法式。假如一切順遂,這將打印以下信息:
Inside SpellChecker constructor. Inside checkSpelling.
由結構函數主動拆卸
這類形式長短常類似byType,但它運用於結構器參數。 Spring容器在外不雅上autowire屬性被設置XML設置裝備擺設文件中bean的。然後,它測驗考試婚配和連線它的結構函數的參數與bean稱號的設置裝備擺設文件只要一個。假如找到婚配項,它會注入這些bean,不然,它會拋出異常。
例如,假如一個bean界說設置為經由過程結構設置裝備擺設文件主動拆卸,它具有與拼寫檢討類型的參數之一的結構函數,春季尋覓一個bean界說namedSpellChecker,並用它來設置結構函數的參數。依然可使用<constructor-arg>標簽連線殘剩的參數。上面的例子將解釋這個概念。
這裡是TextEditor.java文件的內容:
package com.yiibai; public class TextEditor { private SpellChecker spellChecker; private String name; public TextEditor( SpellChecker spellChecker, String name ) { this.spellChecker = spellChecker; this.name = name; } public SpellChecker getSpellChecker() { return spellChecker; } public String getName() { return name; } public void spellCheck() { spellChecker.checkSpelling(); } }
上面是別的一個相干的類文件SpellChecker.java內容:
package com.yiibai; public class SpellChecker { public SpellChecker(){ System.out.println("Inside SpellChecker constructor." ); } public void checkSpelling() { System.out.println("Inside checkSpelling." ); } }
以下是MainApp.java文件的內容:
package com.yiibai; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class MainApp { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml"); TextEditor te = (TextEditor) context.getBean("textEditor"); te.spellCheck(); } }
以下是在正常情形下的設置裝備擺設文件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-3.0.xsd"> <!-- Definition for textEditor bean --> <bean id="textEditor" class="com.yiibai.TextEditor"> <constructor-arg ref="spellChecker" /> <constructor-arg value="Generic Text Editor"/> </bean> <!-- Definition for spellChecker bean --> <bean id="spellChecker" class="com.yiibai.SpellChecker"> </bean> </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-3.0.xsd"> <!-- Definition for textEditor bean --> <bean id="textEditor" class="com.yiibai.TextEditor" autowire="constructor"> <constructor-arg value="Generic Text Editor"/> </bean> <!-- Definition for spellChecker bean --> <bean id="SpellChecker" class="com.yiibai.SpellChecker"> </bean> </beans>
創立源代碼和bean設置裝備擺設文件完成後,讓我們運轉運用法式。假如一切順遂,這將打印以下信息:
Inside SpellChecker constructor. Inside checkSpelling.
除此以外,還有autodetect和默許方法,這裡就不再細講。
主動拆卸的局限性:
主動拆卸最好後果是它一直在一個項目中應用。假如主動拆卸紛歧般的應用,它能夠會被混雜為開辟人員可使用它來銜接只要一個或兩個bean界說。不外,主動拆卸可以明顯削減須要指定屬性或結構器參數,但你應當應用它們之前斟酌主動拆卸的局限性和缺陷。