Spring使用教程(二)配置bean:静态工厂方法和实例工厂方法

public class Car {
    private String brand;
    private double price;
    public String getBrand() {
        return brand;
    }
    public void setBrand(String brand) {
        this.brand = brand;
    }
    public double getPrice() {
        return price;
    }
    public void setPrice(double price) {
        this.price = price;
    }
    @Override
    public String toString() {
        return "Car [brand=" + brand + ", price=" + price + "]";
    }
    public Car(String brand, double price) {
        super();
        this.brand = brand;
        this.price = price;
    }

}

/**
 * 静态工厂方法:直接调用某一个类的静态方法就可以返回bean的实例
 * */
public class StaticCarFactory {

    private static Map<String,Car> cars=new HashMap<String, Car>();
    static{
        cars.put("BMW",new Car("BMW",300000));
        cars.put("benchi",new Car("benchi",690000));
    }
    //静态工厂方法
    public static Car getCar(String name){
        return cars.get(name);
    }
}

    <?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:util="http://www.springframework.org/schema/util"
        xmlns:p="http://www.springframework.org/schema/p"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
            <!-- 通过静态工厂方法配置Bean,注意不是配置静态工厂方法实例,而是bean实例 -->

            <!--
                calss:指向静态工厂方法的全类名
                factory-method:指向静态工厂方法的名字
                constructor-arg:如果工厂静态方法需要参数,则使用constructor-arg来配置
             -->

            <bean id="carfactory" class="com.test.spring.factorybean.StaticCarFactory" factory-method="getCar">
                <constructor-arg value="BMW"></constructor-arg>        <!-- 构造器注入 -->
            </bean>
        </beans>

    public class Main {
        public static void main(String[] args) {
            ApplicationContext con=new ClassPathXmlApplicationContext("carFactory.xml");
            Car car=(Car)con.getBean("carfactory");
            System.out.println(car);
        }
    }

实例工厂方法

/**
 *
 * 实例工厂方法:实例工厂的方法,先创建工厂本身,在调用工厂本身的实例方法返回bean实例
 *
 * */

public class InstanceFactory {

    private Map<String,Car> cars=null;

    public InstanceFactory(){
        cars=new HashMap<String, Car>();
        cars.put("BMW",new Car("BMW",300000));
        cars.put("benchi",new Car("benchi",333300000));
    }

    public Car getCar(String brand){
        return cars.get(brand);
    }
}

<?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:util="http://www.springframework.org/schema/util"
        xmlns:p="http://www.springframework.org/schema/p"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
            <!-- 通过静态工厂方法配置Bean,注意不是配置静态工厂方法实例,而是bean实例 -->

            <!--
                calss:指向静态工厂方法的全类名
                factory-method:指向静态工厂方法的名字
                constructor-arg:如果工厂静态方法需要参数,则使用constructor-arg来配置
             -->

            <bean id="carfactory" class="com.test.spring.factorybean.StaticCarFactory" factory-method="getCar">
                <constructor-arg value="BMW"></constructor-arg>        <!-- 构造器注入 -->
            </bean>

            <!-- 配置工厂的实例 -->
            <bean id="instanceFactory" class="com.test.spring.factorybean.InstanceFactory"></bean>
            <!-- 通过实例工厂方法类配置bean -->
            <bean id="car" factory-bean="instanceFactory" factory-method="getCar">
                <constructor-arg value="benchi"></constructor-arg>
            </bean>
        </beans>
时间: 2024-07-30 00:46:07

Spring使用教程(二)配置bean:静态工厂方法和实例工厂方法的相关文章

Spring学习笔记二(Bean注入的几种方式)

1.前言 上一篇博客从宏观上讲解了一下Spring的知识,下面这篇来着重讲解一下有关Bean注入的几种方式. 2.Bean注入的几种方式 2.1 类构造器初始化 这也是默认的方式,在上一篇博客中也有所体现.直接在applicationContext.xml配置文件中,配置Bean标签即可 <span style="font-family:SimSun;font-size:18px;"><!-- 实例工厂初始化 --> <!-- 必须先创建实例工厂对应的Be

Spring Security教程(二):自定义数据库查询

Spring Security自带的默认数据库存储用户和权限的数据,但是Spring Security默认提供的表结构太过简单了,其实就算默认提供的表结构很复杂,也不一定能满足项目对用户信息和权限信息管理的要求.那么接下来就讲解如何自定义数据库实现对用户信息和权限信息的管理. 一.自定义表结构 这里还是用的mysql数据库,所以pom.xml文件都不用修改.这里只要新建三张表即可,user表.role表.user_role表.其中user用户表,role角色表为保存用户权限数据的主表,user_

Spring框架(二) ---- bean的歧义性

自动装配bean时,如果符合条件的bean超过一个,就会出现歧义性,抛出NoUniqueBeanDefinitionException异常,有如下两种方法保证bean的唯一性: 一.使用@Primary注解标记首选bean 1.与@Component注解组合使用在自动扫描的bean上 2.与@Bean注解组合使用在java配置中 3.使用primary="true"属性在xml配置中的bean标签上 二.使用@Qualifier注解限定选择bean 1.与@Autowired注解组合使

Spring初学之FactoryBean配置Bean

实体bean: Car.java: package spring.beans.factorybean; public class Car { private String name; private int price; public Car(String name, int price) { super(); this.name = name; this.price = price; } public String getName() { return name; } public void

spring MVC学习(二)---配置相关的东西

1.在上一节中我们提到过每一个DispatcherServlet都会有一个上下文 (WebApplictionContext),并且继承了这些上下文中的bean,其中以一些"特殊"的我们会用到,但是一般我们可以不用去理会这些,也不用自己去维护,因为springMVC有一个默认的列表,它帮我们进行维护. 下面看下官方文档中列出的: 2.在1中我们提到默认维护的列表,这些都定义在DispatcherServlet.properties和DispatcherServlet在同一个包中,他们都

spring之通过FactoryBean配置Bean

Car.java package com.gong.spring.beans.factoryBean; public class Car { private String name; private double price; public String getName() { return name; } public void setName(String name) { this.name = name; } public double getPrice() { return price;

Spring_通过工厂方法配置 Bean

beans-factory.xml <?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.s

Spring 通过工厂方法(Factory Method)来配置bean

Spring 通过工厂方法(Factory Method)来配置bean 在Spring的世界中, 我们通常会利用bean config file 或者 annotation注解方式来配置bean. 在第一种利用bean config file(spring xml)方式中, 还包括如下三小类 反射模式 工厂方法模式(本文重点) Factory Bean模式 其中反射模式最常见, 我们需要在bean 配置中指明我们需要的bean object的全类名. 例如: <bean id="car1

spring 通过工厂方法配置Bean

概要: 通过调用静态工厂方法创建Bean 调用静态工厂方法创建Bean是将对象创建的过程封装到静态方法中.当client须要对象时,仅仅须要简单地调用静态方法,而不用关心创建对象地细节. 要声明通过静态方法创建的Bean,须要在Bean地class属性里指定拥有该工厂的方法的类,同一时候在factory-method属性里指定工厂方法的名称.最后,使用<constructor-arg>元素为该方法传递方法參数 通过调用实例工厂方法创建Bean 实例工厂方法:将对象的创建过程封装到另外一个对象实