目录
一、前置
最近看了一下Spring的doCreateBean方法的实现,里面提到Spring会利用策略查看是否是工厂方法的bean,是则利用工厂直接构建。反之再选择对应参数的构造。
于是乎复习了一下SpringBean的构建方法,分为:
1.构造构建
2.工厂构建
3.静态工厂构建
二、实例
我们通过XML的方式来配置bean。
<?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" >
<!-- 默认构造实例化 -->
<bean id="bean1" class="com.example.demo.bean.Bean"/>
<!-- 指定构造器实例化 -->
<bean id="bean2" class="com.example.demo.bean.Bean">
<!-- 指定构造器参数 index对应构造器中参数的位置 -->
<!-- 也可以通过指定参数类型,指定参数名称来注入属性-->
<constructor-arg index="0" value="小明"/>
<constructor-arg index="1" value="3"/>
</bean>
<!-- 工厂方法 -->
<bean id="factory" class="com.example.demo.factory.FactoryCreateBean"></bean>
<bean id="factoryBean" factory-method="getBean" factory-bean="factory"></bean>
<!-- 静态工厂 -->
<bean id="staticBean" class="com.example.demo.factory.FactoryCreateBean" factory-method="getStaticBean"></bean>
</beans>
则有输出为:
public static void main(String[] args) {
BeanFactory bf = new XmlBeanFactory(new ClassPathResource("/bean.xml"));
//测试静态工厂
Object bean2 = bf.getBean("staticBean");
System.out.println(bean2);
}
输出:
11:08:41.880 [main] DEBUG org.springframework.beans.factory.xml.XmlBeanDefinitionReader - Loaded 5 bean definitions from class path resource [bean.xml]
11:08:41.885 [main] DEBUG org.springframework.beans.factory.xml.XmlBeanFactory - Creating shared instance of singleton bean 'staticBean'
Bean [name=null, age=null]
其他的测试可以自己测试一下,都是一样的。
另外提一点:Spring检测bean是否是工厂方法构建的bean其中一种方式就是XML的factory-method属性标签。