`

工厂方法配置,

 
阅读更多

bean的配置方式:通过全类名(反射),通过工厂方法(静态工厂方法&实例工厂方法),FactoryBean

静态工厂方法

package com.hous.factory;

import java.util.HashMap;
import java.util.Map;

import com.hous.spring.Car;

public class StaticCarFactory {
	private static Map<String, Car> cars = new HashMap<String, Car>();

	static {
		cars.put("qirui", new Car("qirui", 200000));
		cars.put("hanma", new Car("hanma", 100000));
	}

	/**
	 * 静态工厂方法
	 * 
	 * @param name
	 * @return
	 */
	public static Car getCar(String name) {
		return cars.get(name);
	}

}

 

实例工厂方法

package com.hous.factory;

import java.util.HashMap;
import java.util.Map;

import com.hous.spring.Car;

/**
 * 实例工厂方法需要创建工厂本身,再调用工厂实例方法返回bean实例
 *
 */
public class InstanceCarFactory {
	private Map<String, Car> cars = null;

	public InstanceCarFactory() {
		this.cars = new HashMap<String, Car>();
		cars.put("qirui", new Car("qirui", 200000));
		cars.put("luhu", new Car("luhu", 100000));
	}

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

}

 

applicationContext.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"
	xmlns:p="http://www.springframework.org/schema/p"
	xmlns:util="http://www.springframework.org/schema/util"
	xmlns:context="http://www.springframework.org/schema/context"
	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.2.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd">
	<!-- 通过静态工厂方法配置Bean,不是工厂方法实例而是Bean的实例 -->
	<!-- 
		class:静态工厂全类名
		factory-method:指向静态工厂类的静态方法
		constructor-arg:传入静态方法中的参数
	 -->
	<bean id="car1" class="com.hous.factory.StaticCarFactory" factory-method="getCar">
		<constructor-arg value="hanma"></constructor-arg>
	</bean>
	
	<!-- 配置工厂实例 -->
	<bean id="carFactory" class="com.hous.factory.InstanceCarFactory"></bean>
	<!-- 通过实例工厂方法配置bean -->
	<bean id="car2" factory-bean="carFactory" factory-method="getCar">
		<constructor-arg value="luhu"></constructor-arg>
	</bean>
</beans>

 

 FactoryBean配置

package com.hous.factory;

import org.springframework.beans.factory.FactoryBean;

import com.hous.spring.Car;

/**
 * 自定义FactoryBean实现接口
 * @author Administrator
 *
 */
public class CarFactoryBean implements FactoryBean<Car> {
	
	private String brand;
	
	public String getBrand() {
		return brand;
	}

	public void setBrand(String brand) {
		this.brand = brand;
	}

	@Override
	public Car getObject() throws Exception {
		return new Car(brand, 5000);
	}

	@Override
	public Class<?> getObjectType() {
		return Car.class;
	}

	@Override
	public boolean isSingleton() {
		return true;
	}

}

 

 

<?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:p="http://www.springframework.org/schema/p"
	xmlns:util="http://www.springframework.org/schema/util"
	xmlns:context="http://www.springframework.org/schema/context"
	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.2.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd">

	<!-- 
		通过FactoryBean配置bean实例
		class:配置FactoryBean的全类名
		property:指向FactoryBean的属性
		通过FactoryBean的getObject方法返回bean实例
	 -->
	<bean id="car" class="com.hous.factory.CarFactoryBean">
		<property name="brand" value="fute"></property>
	</bean>
	
</beans>

 

分享到:
评论

相关推荐

    SSH笔记-静态/实例工厂方法配置bean

    首先,静态工厂方法配置Bean是通过调用类中静态工厂方法来创建对象的方式。这种方式下,Spring并不直接实例化目标类,而是调用预先定义好的静态工厂方法。配置如下: ```xml ``` 在这里,`...

    工厂方法模式工厂方法模式

    在实际应用中,工厂方法模式广泛应用于框架设计和组件库中,如Spring框架中的BeanFactory,它可以根据配置文件动态地创建不同类型的Bean。此外,许多数据库连接池实现,如C3P0、DBCP等,都使用了工厂方法模式来创建...

    设计模式-工厂方法模式

    在工厂方法模式中,反射可以用来根据配置文件动态加载相应的工厂类,这样就可以根据不同的配置创建不同类型的对象,增加了系统的可配置性和灵活性。 配置文件通常用于存储系统运行时的参数或者对象创建的指示。在...

    工厂方法模式Demo

    通过工厂方法,我们可以根据不同的条件或者配置动态地创建出所需的对象,提高了代码的灵活性和可扩展性。例如,在数据库连接的例子中,我们可以有一个抽象的数据库连接工厂,然后针对MySQL、Oracle等不同数据库创建...

    工厂方法模式demo

    工厂方法模式是面向对象设计模式中的一个核心模式,属于创建型模式。它的主要目的是通过引入一个工厂类来封装实例化过程,使得具体的实例化过程延迟到子类中进行,从而达到解耦和代码复用的目的。在这个“工厂方法...

    spring 实例的工厂方法 依赖注入属性,都使用property 元素确

    ·调用实例工厂方法创建bean 时,必须将实例工厂配置成bean 实例。 而静态工厂方法则无须配置工厂bean。 ·调用实例工厂方法创建bean 时,必须使用factory-bean 属性来确定工厂bean。 而静态工厂方法则使用...

    IOS 工厂方法模式代码Demo

    在iOS开发中,工厂方法模式是一种重要的设计模式,它属于创建型模式,主要用来解决对象创建过程中的灵活性问题。这个“IOS 工厂方法模式代码Demo”是为开发者提供了一个直观的例子,帮助他们理解并应用这种模式。让...

    java工厂方法

    Java工厂方法是面向对象设计模式中的一个核心概念,它属于创建型模式,主要用来解决对象创建过程中的复杂性,提供了一种封装对象创建的方式。在Java中,工厂方法模式不仅是一个设计模式,还是Java标准库中`java.lang...

    spring核心工厂配置源码

    本篇文章将深入探讨Spring的核心工厂配置源码,以及在Eclipse 3.2和Tomcat 5.0环境下如何进行开发。 首先,我们需要理解Spring中的Bean工厂,它是IoC容器的基础。Bean工厂负责管理对象的生命周期和依赖关系。在...

    Java-Spring-SpringIoC容器-SpringIoC的学习

    2. **工厂方法配置**:对于非静态工厂类,可以通过`factory-bean`指定工厂对象,`factory-method`指定工厂方法,如`clientService2`。对于静态工厂类,可以直接在`class`属性中指定工厂方法,如`clientService`。 3...

    尚硅谷佟刚Spring4代码及PPT.rar

    在 Eclipse 中安装 SpringIDE 插件、IOC & DI、在 Spring 中配置 Bean、自动装配、Bean 之间的关系(依赖、继承)、Bean 的作用域、使用外部属性文件、SpEL、管理 Bean 的生命周期、通过工厂方法配置 Bean、通过 ...

    工厂方法模式

    至于标签中的“源码”和“工具”,这可能意味着工厂方法模式在软件开发过程中常用于框架或库的源代码实现,以及作为构建工具的一部分,用于动态生成或配置对象。在Java等面向对象语言中,工厂方法模式是常见的设计...

    实例化Spring bean的两种工厂方法

    本篇将详细探讨两种工厂方法——实例工厂方法和静态工厂方法,用于创建Spring Bean。 首先,我们要理解Spring Bean的概念。Spring Bean是Spring IoC容器管理的对象,这些对象的生命周期、依赖关系以及初始化行为由...

    工厂方法和序列化实例

    在IT行业中,工厂方法和序列化是两个非常重要的概念,特别是在使用C#和ASP.NET进行开发时。本文将深入探讨这两个主题,以及它们在实际项目中的应用。 首先,我们来看工厂方法。工厂方法是一种设计模式,它提供了一...

    09-IoC配置-静态工厂与实例工厂创建bean

    Spring IOC 04 配置通过静态工厂方法创建的bean、实例工厂创建的bean、FactoryBean (1)bean的创建默认就是框架利用反射new出来的bean实例; (2)工厂模式:工厂帮我们创建对象,有一个专门帮我们创建对象的类,这...

    设计模式 工厂方法模式

    工厂方法模式是面向对象设计中的一种经典设计模式,属于创建型模式。它的主要目的是通过抽象产品的生产过程,将具体的实例化操作延迟到子类中,从而实现代码的解耦和可扩展性。在这个主题中,我们将深入探讨工厂方法...

    工厂模式:不修改工厂,只增删类对应修改配置文件就OK啦!

    这种设计模式分为简单工厂、工厂方法和抽象工厂三种类型。在标题中提到的“不修改工厂,只增删类对应修改配置文件”,这是工厂模式的一种高级应用,即使用配置文件动态地决定创建哪个具体的产品对象。 在实际应用中...

    设计模式工厂方法的代码演示

    工厂方法(Factory Method)作为设计模式中的一员,是创建型模式的一种,它提供了一种创建对象的最佳方式。在这个模式中,一个工厂类负责创建对象,而具体的创建过程则由子类来决定,从而实现了对创建过程的抽象。 ...

    Java设计模式-工厂方法

    Java设计模式是软件开发中的重要概念,...例如,当系统需要根据用户选择或者配置文件动态地创建不同类型的对象时,工厂方法模式就显得尤为适用。总的来说,理解和掌握工厂方法有助于提升Java软件设计的质量和可维护性。

    反射工厂XML配置无需编译加入功能DEMO

    反射工厂配合XML配置,可以实现动态加载和管理类,从而在不重新编译代码的情况下添加新功能,提高软件的灵活性和可扩展性。本DEMO将深入探讨如何利用反射和XML配置来实现这一目标。 首先,让我们了解什么是反射。在...

Global site tag (gtag.js) - Google Analytics