Spring的实例化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" xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
<!-- 使用类构造器直接实例化 -->
<bean id="userBean1" class="com.zpring.implbean.UserBean" />
<!-- 使用静态工厂的方法实例化 -->
<bean id="userBean2" class="com.zpring.factory.BeanFactory" factory-method="UserBeanService" />
<!-- 使用实例工厂方法实例化 -->
<bean id="factory" class="com.zpring.factory.BeanFactory" />
<bean id="userBean3" factory-bean="factory" factory-method="getUserBeanService" />
</beans>
<pre name="code" class="java">PersonBean 接口:
public interface PersonBean {
void show();
}
UserBean 类
public class UserBean implements PersonBean {
@Override
public void show() {
System.out.println("Hello Kuka");
}
}
BeanFactory 工程类:
package com.zpring.factory;
import com.zpring.implbean.UserBean;
import com.zpring.interfacebean.PersonBean;
public class BeanFactory
{
//使用静态工厂的方法实例化使用
public static PersonBean UserBeanService()
{
return new UserBean();
}
public PersonBean getUserBeanService()
{
return new UserBean();
}
}
<!-- 使用类构造器直接实例化 -->
<bean id="userBean1" class="com.zpring.implbean.UserBean" /> <!--容器拿到类名称(包括路径)后就可反射出类,进而生成类的实例对象出来-->
<!-- 使用静态工厂的方法实例化 -->
<bean id="userBean2" class="com.zpring.factory.BeanFactory" factory-method="UserBeanService" /><!-- 容器放射出工厂类后,就可以执行静态方法,进而得到一个实例对象 -->
<!-- 使用实例工厂方法实例化 -->
<bean id="factory" class="com.zpring.factory.BeanFactory" />
<bean id="userBean3" factory-bean="factory" factory-method="getUserBeanService" /><!-- 容器反射出一个工厂类,先得到这个工厂类对象,调用工厂中的方法生成一个指定的类实例-->