Spring中實例化Bean的三種方式


<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-2.5.xsd">

<!--第一種方式:直接實例化Bean-->
<bean id="personservice1" class="com.binyong.service.PersonServiceBean"></bean>

<!--第二種方式:通過靜態工廠方法實例化Bean-->
<!--注意:用這種方式實例化Bean時,工廠方法必須是static的-->
<bean id="personservice2" class="com.binyong.service.impl.PersonServiceBeanFactory" factory-method="createPersonServiceBean"></bean>

<!--第三種方式:通過調用工廠實例的工廠方法實例化Bean,該方法可以不是static的-->
<!--注意:這種方式實例化Bean時,必須先實例化工廠Bean-->
<bean id="PersonServiceBeanFactory" class="com.binyong.service.impl.PersonServiceBeanFactory"></bean>
<bean id="personservice3" factory-bean="PersonServiceBeanFactory" factory-method="createPersonServiceBean2" depends-on="PersonServiceBeanFactory"></bean>

</beans>

獲取Bean的代碼:

ApplicationContext ctx = new ClassPathXmlApplicationContext(new String[]{"beans.xml"});
PersonServiceBean psb = (PersonServiceBean)ctx.getBean("personservice1");

第一種方式可能出現的異常:

1. org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [com.binyong.service.PersonServiceBean] for bean with name 'personservice1' defined in class path resource [beans.xml]; nested exception is java.lang.ClassNotFoundException: com.binyong.service.PersonServiceBean

可能導致異常的原因:class屬性中類配置出現問題

第二種方式可能導致的異常

1.org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'personservice2' defined in class path resource [beans.xml]: No matching factory method found: factory method 'createPersonServiceBean'

可能導致異常的原因:工廠方法沒有定義爲靜態方法。

第三種方式可能導致的異常

1.org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'PersonServiceBeanFactory' is defined
可能導致異常的原因:沒有先實例化工廠Bean,必須先配置工廠Bean。
在定義bean是可以指定depends-on屬性設置先實例化的bean,如本例子中的
depends-on="PersonServiceBeanFactory". 否則就要在應用中明確初始化該bean
2.org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'personservice3' defined in class path resource [beans.xml]: No matching factory method found: factory bean 'PersonServiceBeanFactory'; factory method 'createPersonServiceBean2'

可能導致異常的原因:factory-method對應的工廠方法定義成了靜態的。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章