`

Spring Bean工厂与工厂Bean

阅读更多

1.静态Bean工厂:静态方法创建对象

将对象创建过程封装到静态方法中,客户需要时调用该静态方法即可,无需关心创建的细节;

 

 1.1 创建静态工厂方法,用户构造对象实例

abstract class Product {
    // ..公共属性
}


class ProductA extends Product {
    // ...
}

class ProductB extends Product {
    // ...
}

class ProductCreator {
    
    public static Product createProduct(String productId) {
        if("productAA".equals(productId)){
            return new ProductA();
        }else if("productBB".equals(productId)) {
            return new ProductB();
        }
        throw new IllegalArgumentException("unknow product");
    }
}

 

1.2 通过factory-method指定工厂方法,生成bean

	<bean id="aaa" class="com.yli.util.ProductCreator" 
		factory-method="createProduct">
		<constructor-arg value="productAA"></constructor-arg>
	</bean>
	
	<bean id="bbb" class="com.yli.util.ProductCreator" 
		factory-method="createProduct">
		<constructor-arg value="productBB"></constructor-arg>
	</bean>

 

以上过程等价于
    Product aaa = ProductCreator.createProduct("productAA");
    Product bbb = ProductCreator.createProduct("productBB");
 
2.实例Bean工厂:实例方法创建对象
将对象创建过程封装到另一个对象实例方法中,客户调用该实例方法即可,无需关心对象创建细节
2.1 创建实例对象工厂
abstract class Product {
    // ..公共属性
}


class ProductA extends Product {
    // ...
}

class ProductB extends Product {
    // ...
}

class ProductCreator {
    
    private Map<String, Product> products;

    public void setProducts(Map<String, Product> products) {
        this.products = products;
    }

    public Product CreateProduct(String productId) {
        Product product = products.get(productId);
        if(null != product) {
            return product;
        }
        throw new IllegalArgumentException("unknow productId");
    }
}
 2.2 通过factory-bean和factory-method合作,创建对象实例
<bean id="productCreator" class="com.yli.util.ProductCreator">
		<property name="products">
			<map>
				<entry key="aaa">
					<bean class="com.yli.util.ProductA"></bean>
				</entry>
				<entry key="bbb">
					<bean class="com.yli.util.ProductB"></bean>
				</entry>
			</map>
		</property>
	</bean>
	
	<bean id="aaa" factory-bean="productCreator" factory-method="createProduct">
		<constructor-arg value="aaa"></constructor-arg>
	</bean>
	
	<bean id="bbb" factory-bean="productCreator" factory-method="createProduct">
		<constructor-arg value="bbb"></constructor-arg>
	</bean>
 
以上过程等价于
ProductCreator creator = new ProductCreator();
creator.setProducts(...);

Product aaa = creator.CreateProduct("aaa");
Product bbb = creator.CreateProduct("bbb");
 
3.工厂Bean:非Bean工厂(包括静态域实例工厂)
工厂Bean不是普通Bean,它被当做工厂来使用:用于创建其他Bean
工厂Bean要求实现FactoryBean,Spring为此提供抽象模板AbstractFactoryBean,方便扩展
工厂Bean大多数用于实现框架功能,比如:
  • JndiObjectFactoryBean 被用于创建JNDI
  • ProxyFactoryBean 被用于创建Bean代理,广泛用于AOP
  • LocalSessionFactoryBean 被用于创建HibernateSessionFactory
  • SqlSessionFactoryBean 被用户创建Mybatis的SqlSessionFactory
 3.1 创建工厂Bean
abstract class Product {
    // ..公共属性
}


class ProductA extends Product {
    // ...
}

class ProductB extends Product {
    // ...
}

class ProductCreator extends AbstractFactoryBean<Product>{
    
    private Product product;
    public void setProduct(Product product) {
        this.product = product;
    }

    @Override
    protected Product createInstance() throws Exception {
        // do more ...
        return product;
    }

    @Override
    public Class<?> getObjectType() {
        return product.getClass();
    }
}
 3.2
分享到:
评论

相关推荐

    Spring Bean创建初始化流程.docx

    在Spring框架中,Bean的创建和初始化是IoC(Inversion of Control)容器的核心功能,这一过程涉及到多个步骤。以下是对Spring Bean创建初始化流程的详细解释: 1. **初始化ApplicationContext**: 开始时,通过`...

    spring bean的生命周期

    - **XML配置**:在传统的Spring应用中,Bean的定义通常写在XML配置文件中,如`springbean-xml`中的配置。 - **注解配置**:使用`@Component`,`@Service`,`@Repository`和`@Controller`注解标记类,配合`@...

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

    在Spring配置文件中,我们需要定义一个工厂bean,然后指定该工厂bean的`factory-bean`属性,以及工厂bean中用于创建目标bean的方法,即`factory-method`属性。下面是一个简单的例子: ```xml &lt;bean id="myFactory...

    spring bean XML配置入门

    9. **Spring容器的启动与Bean的生命周期**: 一旦XML配置加载到Spring容器中,容器将根据配置创建Bean实例,并按照定义进行初始化、依赖注入,最后完成Bean的生命周期管理。 10. **实践操作**: 在实际开发中,...

    Spring bean 动态注册,jar包热替换

    spring的bean动态加载则需要对相应的bean进行动态注册,以及jar与class文件动态加载。测试示例中是spring boot 的部分代码,动态加载的内容为接口实现类,且初始化时加载本地的实现类,动态加载后改为非程序加载目录...

    Spring Bean重复执行两次(实例被构造两次)问题分析

    3. **@PostConstruct与初始化回调**:Spring允许我们在Bean初始化后执行特定代码,通常通过`@PostConstruct`注解的方法来实现。如果这个方法被意外地调用了两次,那么Bean也会被构造两次。检查是否有多处调用或配置...

    spring bean 属性总结

    ### Spring Bean 属性详解 Spring框架是Java平台上的一个开源框架,主要用来简化企业级应用程序的开发。在Spring中,核心概念之一就是Bean,它是一个简单的Java对象,由Spring IoC容器管理。Spring通过XML配置文件...

    普元eos-springbean开发

    本文将围绕“普元EOS-SpringBean开发”这一主题展开讨论,重点讲解SpringBean在普元EOS中的开发与配置流程,以及通过具体案例来深入理解其应用场景。 ### SpringBean开发与配置 #### SpringBean简介 SpringBean是...

    @PostConstruct注解用来获取springbean对象.txt

    获取springbean对象

    一个springbean文件

    bean文件 springbean文件

    spring bean life cycle

    在Spring框架中,Bean生命周期是核心概念之一,它涉及到Bean的创建、初始化、使用和销毁等阶段。了解和掌握Bean生命周期对于开发高质量的Spring应用至关重要。以下是对Spring Bean生命周期的详细解析。 首先,Bean...

    springBean加载过程源码解析文档,附有代码类名和行数

    Spring Bean 加载过程源码解析文档 Spring Bean 加载过程是 Spring 框架中最核心的部分之一,涉及到 ApplicationContext 的初始化、Bean 的加载和注册等过程。在 Spring Boot 应用程序中,SpringApplication 负责...

    Spring Bean 加载顺序 .

    在Spring框架中,Bean的加载顺序是理解Spring IoC(Inversion of Control,控制反转)容器工作原理的关键部分。这个过程涉及到Bean定义的解析、实例化、初始化等多个步骤。让我们详细探讨Spring Bean加载顺序的各个...

    Spring bean 管理

    在Spring中,Bean的管理包含多个方面:创建Bean实例、配置Bean属性、控制Bean的生命周期以及Bean作用域的定义。接下来将详细解释这些知识点。 1. Spring的工厂类: Spring通过工厂模式设计了一系列工厂类来创建对象...

    spring学习----工厂Bean

    在Spring框架中,"工厂Bean"是一个非常关键的概念,它扩展了传统的Bean定义,使得我们可以在Spring IoC容器中创建自定义的实例化逻辑。工厂Bean允许开发者在对象实例化时进行更复杂的控制,比如引入特定的初始化过程...

    详解Spring 中如何控制2个bean中的初始化顺序

    Spring 中控制 2 个 bean 的初始化顺序 在 Spring 框架中,控制多个 bean 的初始化顺序是一个常见的问题。本篇文章将详细介绍如何控制 2 个 bean 的初始化顺序,提供了多种实现方式,并分析了每种方式的优缺。 ...

    spring bean的生命周期测试代码

    在Spring框架中,Bean的生命周期管理是其核心特性之一,它允许开发者控制Bean从创建到销毁的整个过程。本资源提供了在Spring 4.2环境下关于Bean生命周期的测试代码,帮助我们深入理解这一关键概念。 首先,让我们...

    创建SpringBean配置工具类

    创建SpringBean配置工具类(安全)如: &lt;bean id=... scope="prototype"&gt;&lt;/bean&gt;

    spring 获取bean

    spring 获取bean spring 获取bean spring 获取bean spring 获取bean spring 获取bean spring 获取bean spring 获取bean spring 获取bean

    spring 5.2.9 07 源码分析-spring的bean工厂准备工作 测试用例

    在Spring框架中,Bean工厂是核心组件之一,它负责管理所有Bean的生命周期,包括实例化、配置、装配以及销毁。本章将详细分析Spring 5.2.9版本中Bean工厂的准备工作,特别是通过测试用例来理解其实现细节。 在Spring...

Global site tag (gtag.js) - Google Analytics