通过Bean工厂创建bean实例的几种方法

来源:互联网 发布:算法之美 pdf 编辑:程序博客网 时间:2024/05/16 18:05

使用bean工厂创建bean实例的几种方法。

一、/*实例工厂方法:实例工厂方法,即现需要创建工厂本身,在调用工厂的实例方法。
 * 来返回bean实例。
 * */

    <!-- 通过实例工厂方法来配置beanfanctory-bean属性,指向实例工厂方法的类factory-mehtod:指向静态工厂方法的名字constructor-arg:如果工厂方法需要传入参数,则使用constructor-arg来配置参数。         -->    <bean id="carsfactory" class="com.spring.test.beans.factory.InstanceCarFactroy"></bean>    <bean id="car2" factory-bean="carsfactory" factory-method="getCar">        <constructor-arg value="ford"></constructor-arg>    </bean>


建立配置文件如下:

    <!-- 通过实例工厂方法来配置beanfanctory-bean属性,指向实例工厂方法的类factory-mehtod:指向静态工厂方法的名字constructor-arg:如果工厂方法需要传入参数,则使用constructor-arg来配置参数。         -->    <bean id="carsfactory" class="com.spring.test.beans.factory.InstanceCarFactroy"></bean>    <bean id="car2" factory-bean="carsfactory" factory-method="getCar">        <constructor-arg value="ford"></constructor-arg>    </bean>


    <!-- 通过实例工厂方法来配置bean -->

二、通过
 * 静态工厂方法:直接调用某一个类的静态方法就可以返回Bean实例。
 * */

public class StaticCarFactory {    private static Map<String,Car> cars=new HashMap<String,Car>();    static {        cars.put("audi", new Car("audi",300000));        cars.put("ford", new Car("ford",400000));            }    //静态工厂:直接调用某一个类的静态方法就可以 返回Bean实例    public static Car getCar(String name){        return cars.get(name);    }}


配置文件如下
<!-- 通过静态工厂方法来配置bean。注意不是配置静态工厂方法实例。而是配置bean实例 --><!-- class属性,指向静态工厂方法的名字Factory-method:指向静态工厂方法的名字constructor-arg:如果工厂方法需要传入参数,则使用constructor-arg来配置参数说明:通过调用实例工厂方法创建Bean实例工厂方法:将对象的创建过程封装到另外一个对象实例方法里,当客户需要请求对象时,只需要简单的调用该实例方法而不需要关心对象的创建细节,要声明通过实例工厂方法创建的Bean.在bean的factory-method属性里指定拥有该工厂方法的Bean。在factory-method属性里指定该工厂方法的名称。使用construtor-arg元素为工厂方法传递方法参数。 --><bean id="car1" class="com.spring.test.beans.factory.StaticCarFactory" factory-method="getCar"><constructor-arg value="audi"></constructor-arg></bean>
三、通过BeanFactory类来配置bean实例,注意一定要实现
FactoryBean<T>接口

import org.springframework.beans.factory.FactoryBean;import com.spring.test.beans.factory.Car;/* *  *  * */public class CarFactoryBean  implements FactoryBean<Car>{private String brand;//返回bean對象@Overridepublic Car getObject() throws Exception {// TODO Auto-generated method stubreturn new Car(brand,5000);//在该方法中可以返回一个新的Car具体对象 }//返回bean類型类型@Overridepublic Class<?> getObjectType() {// TODO Auto-generated method stubreturn null;}//返回是否是单实例@Overridepublic boolean isSingleton() {// TODO Auto-generated method stubreturn false;}public String getBrand() {return brand;}public void setBrand(String brand) {this.brand = brand;}}


0 0
原创粉丝点击