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的创建和初始化是IoC(Inversion of Control)容器的核心功能,这一过程涉及到多个步骤。以下是对Spring Bean创建初始化流程的详细解释: 1. **初始化ApplicationContext**: 开始时,通过`...
- **XML配置**:在传统的Spring应用中,Bean的定义通常写在XML配置文件中,如`springbean-xml`中的配置。 - **注解配置**:使用`@Component`,`@Service`,`@Repository`和`@Controller`注解标记类,配合`@...
在Spring配置文件中,我们需要定义一个工厂bean,然后指定该工厂bean的`factory-bean`属性,以及工厂bean中用于创建目标bean的方法,即`factory-method`属性。下面是一个简单的例子: ```xml <bean id="myFactory...
9. **Spring容器的启动与Bean的生命周期**: 一旦XML配置加载到Spring容器中,容器将根据配置创建Bean实例,并按照定义进行初始化、依赖注入,最后完成Bean的生命周期管理。 10. **实践操作**: 在实际开发中,...
spring的bean动态加载则需要对相应的bean进行动态注册,以及jar与class文件动态加载。测试示例中是spring boot 的部分代码,动态加载的内容为接口实现类,且初始化时加载本地的实现类,动态加载后改为非程序加载目录...
3. **@PostConstruct与初始化回调**:Spring允许我们在Bean初始化后执行特定代码,通常通过`@PostConstruct`注解的方法来实现。如果这个方法被意外地调用了两次,那么Bean也会被构造两次。检查是否有多处调用或配置...
### Spring Bean 属性详解 Spring框架是Java平台上的一个开源框架,主要用来简化企业级应用程序的开发。在Spring中,核心概念之一就是Bean,它是一个简单的Java对象,由Spring IoC容器管理。Spring通过XML配置文件...
本文将围绕“普元EOS-SpringBean开发”这一主题展开讨论,重点讲解SpringBean在普元EOS中的开发与配置流程,以及通过具体案例来深入理解其应用场景。 ### SpringBean开发与配置 #### SpringBean简介 SpringBean是...
获取springbean对象
bean文件 springbean文件
在Spring框架中,Bean生命周期是核心概念之一,它涉及到Bean的创建、初始化、使用和销毁等阶段。了解和掌握Bean生命周期对于开发高质量的Spring应用至关重要。以下是对Spring Bean生命周期的详细解析。 首先,Bean...
Spring Bean 加载过程源码解析文档 Spring Bean 加载过程是 Spring 框架中最核心的部分之一,涉及到 ApplicationContext 的初始化、Bean 的加载和注册等过程。在 Spring Boot 应用程序中,SpringApplication 负责...
在Spring框架中,Bean的加载顺序是理解Spring IoC(Inversion of Control,控制反转)容器工作原理的关键部分。这个过程涉及到Bean定义的解析、实例化、初始化等多个步骤。让我们详细探讨Spring Bean加载顺序的各个...
在Spring中,Bean的管理包含多个方面:创建Bean实例、配置Bean属性、控制Bean的生命周期以及Bean作用域的定义。接下来将详细解释这些知识点。 1. Spring的工厂类: Spring通过工厂模式设计了一系列工厂类来创建对象...
在Spring框架中,"工厂Bean"是一个非常关键的概念,它扩展了传统的Bean定义,使得我们可以在Spring IoC容器中创建自定义的实例化逻辑。工厂Bean允许开发者在对象实例化时进行更复杂的控制,比如引入特定的初始化过程...
Spring 中控制 2 个 bean 的初始化顺序 在 Spring 框架中,控制多个 bean 的初始化顺序是一个常见的问题。本篇文章将详细介绍如何控制 2 个 bean 的初始化顺序,提供了多种实现方式,并分析了每种方式的优缺。 ...
在Spring框架中,Bean的生命周期管理是其核心特性之一,它允许开发者控制Bean从创建到销毁的整个过程。本资源提供了在Spring 4.2环境下关于Bean生命周期的测试代码,帮助我们深入理解这一关键概念。 首先,让我们...
创建SpringBean配置工具类(安全)如: <bean id=... scope="prototype"></bean>
spring 获取bean spring 获取bean spring 获取bean spring 获取bean spring 获取bean spring 获取bean spring 获取bean spring 获取bean
在Spring框架中,Bean工厂是核心组件之一,它负责管理所有Bean的生命周期,包括实例化、配置、装配以及销毁。本章将详细分析Spring 5.2.9版本中Bean工厂的准备工作,特别是通过测试用例来理解其实现细节。 在Spring...