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>
相关推荐
首先,静态工厂方法配置Bean是通过调用类中静态工厂方法来创建对象的方式。这种方式下,Spring并不直接实例化目标类,而是调用预先定义好的静态工厂方法。配置如下: ```xml ``` 在这里,`...
本文将深入探讨工厂方法模式的内部机制,以及通过反射和配置文件技术增强其灵活性的方法。 ### 工厂方法模式的精髓 工厂方法模式的精髓在于“定义一个用于创建对象的接口,让子类决定实例化哪一个类”。具体来说,...
通过工厂方法,我们可以根据不同的条件或者配置动态地创建出所需的对象,提高了代码的灵活性和可扩展性。例如,在数据库连接的例子中,我们可以有一个抽象的数据库连接工厂,然后针对MySQL、Oracle等不同数据库创建...
【食品工厂人力资源配置】 在食品工厂的建设和运营中,人力资源配置是至关重要的环节。它涉及到工厂组织机构的构建,人员的定岗定编,以及人员的选拔与培训。配置的目标是确保设备的有效利用和人员的合理分配,同时...
工厂方法模式是面向对象设计模式中的一个核心模式,属于创建型模式。它的主要目的是通过引入一个工厂类来封装实例化过程,使得具体的实例化过程延迟到子类中进行,从而达到解耦和代码复用的目的。在这个“工厂方法...
·调用实例工厂方法创建bean 时,必须将实例工厂配置成bean 实例。 而静态工厂方法则无须配置工厂bean。 ·调用实例工厂方法创建bean 时,必须使用factory-bean 属性来确定工厂bean。 而静态工厂方法则使用...
在iOS开发中,工厂方法模式是一种重要的设计模式,它属于创建型模式,主要用来解决对象创建过程中的灵活性问题。这个“IOS 工厂方法模式代码Demo”是为开发者提供了一个直观的例子,帮助他们理解并应用这种模式。让...
在实际应用中,工厂方法模式广泛应用于框架设计和组件库中,如Spring框架中的BeanFactory,它可以根据配置文件动态地创建不同类型的Bean。此外,许多数据库连接池实现,如C3P0、DBCP等,都使用了工厂方法模式来创建...
Java工厂方法是面向对象设计模式中的一个核心概念,它属于创建型模式,主要用来解决对象创建过程中的复杂性,提供了一种封装对象创建的方式。在Java中,工厂方法模式不仅是一个设计模式,还是Java标准库中`java.lang...
本篇文章将深入探讨Spring的核心工厂配置源码,以及在Eclipse 3.2和Tomcat 5.0环境下如何进行开发。 首先,我们需要理解Spring中的Bean工厂,它是IoC容器的基础。Bean工厂负责管理对象的生命周期和依赖关系。在...
2. **工厂方法配置**:对于非静态工厂类,可以通过`factory-bean`指定工厂对象,`factory-method`指定工厂方法,如`clientService2`。对于静态工厂类,可以直接在`class`属性中指定工厂方法,如`clientService`。 3...
在 Eclipse 中安装 SpringIDE 插件、IOC & DI、在 Spring 中配置 Bean、自动装配、Bean 之间的关系(依赖、继承)、Bean 的作用域、使用外部属性文件、SpEL、管理 Bean 的生命周期、通过工厂方法配置 Bean、通过 ...
2. **通过静态工厂方法配置Bean**:这种方式将对象创建过程封装到静态方法中,客户端只需调用静态方法即可获取对象,无需关心创建细节。在配置文件中,需要指定拥有该工厂方法的类及工厂方法名称,并通过 `...
工厂方法模式是面向对象设计模式中的一个创建型模式,它提供了一种封装对象创建过程的方式,使得具体的对象创建过程可以延迟到子类中进行。在C++编程中,工厂方法模式广泛应用于各种软件设计中,因为它能有效地解耦...
工厂方法模式可以让我们编写一组标准的创建逻辑,然后通过配置或扫描来确定具体使用哪个实现。 “扫描”在这里通常指的是程序在运行时自动发现并加载符合特定条件的类。这可能涉及到Java的反射机制、Spring框架的...
在这个实例中,可能会有一个外观类,该类负责调用工厂方法、处理配置文件和利用反射创建及管理对象,对外提供简洁的接口,隐藏内部实现细节。 5. **整合应用**: 将以上四个概念整合到一起,我们可以构建一个高度...
本篇将详细探讨两种工厂方法——实例工厂方法和静态工厂方法,用于创建Spring Bean。 首先,我们要理解Spring Bean的概念。Spring Bean是Spring IoC容器管理的对象,这些对象的生命周期、依赖关系以及初始化行为由...
这个Java源码示例是关于工厂方法模式的一个具体实现,特别是工厂方法的工厂方法,即二级工厂模式。 工厂方法模式的核心思想是定义一个创建对象的接口,但让子类决定实例化哪一个类。这样的好处在于隔离了类的实例化...
在IT行业中,工厂方法和序列化是两个非常重要的概念,特别是在使用C#和ASP.NET进行开发时。本文将深入探讨这两个主题,以及它们在实际项目中的应用。 首先,我们来看工厂方法。工厂方法是一种设计模式,它提供了一...