<?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-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"></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。
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对应的工厂方法定义成了静态的。