`

Spring FactoryBean 使用

 
阅读更多

Spring FactoryBean 使用

Entity:

 

package cn.rayoo.spring.factorybean;

public class Car {

	private String brand;

	private int speed;

	private Double price;
	
	private long id = System.currentTimeMillis();
	

	public long getId() {
		return id;
	}

	public void setId(long id) {
		this.id = id;
	}

	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;
	}

	public int getSpeed() {
		return speed;
	}

	public void setSpeed(int speed) {
		this.speed = speed;
	}

	public Car() {
	}

	public Car(String brand, int speed, Double price) {
		this.brand = brand;
		this.speed = speed;
		this.price = price;
	}

}

 FactoryBean:

 

 

package cn.rayoo.spring.factorybean;

import org.springframework.beans.factory.FactoryBean;

public class CarFactoryBean implements FactoryBean<Car> {

	public Car getObject() throws Exception { // 得到返回实体对象
		String[] infos = carInfo.split(",");

		Car car = new Car();

		car.setBrand(infos[0]);
		car.setSpeed(Integer.parseInt(infos[1]));
		car.setPrice(Double.parseDouble(infos[2]));

		return car;
	}

	public Class<Car> getObjectType() { // 得到返回实体类型
		return null;
	}

	public boolean isSingleton() { // 得到返回实体是否是单例模式
		return true;
	}

	private String carInfo;

	public String getCarInfo() {
		return carInfo;
	}

	public void setCarInfo(String carInfo) {
		this.carInfo = carInfo;
	}

}

 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"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd"
	default-lazy-init="true">

	<!-- scope="singleton/prototype" -->
	<bean id="car1" class="cn.rayoo.spring.factorybean.CarFactoryBean"
		p:carInfo="红旗CB01,100,56.00" />

</beans>

 Junit Test:

 

package cn.rayoo.spring.test;

import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import cn.rayoo.spring.factorybean.Car;
import cn.rayoo.spring.factorybean.CarFactoryBean;

public class FactoryBeanTest {

	@Test
	public void testCarFactoryBean() {
		try {
			final ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
			final Random random = new Random();
			ExecutorService executorService = Executors.newFixedThreadPool(4);
			for (int i = 0; i < 100000; i++) {
				executorService.execute(new Runnable() {
					public void run() {
						try {
							Car car = (Car) ctx.getBean("car1");
							System.out.println(car.getId() + " " + " " + car.getBrand());
							// 以下方式可以获取CarFactoryBean,但不可以用于获取car1对象
							// CarFactoryBean factoryBean = (CarFactoryBean) ctx.getBean("&car1");
							// System.out.println(factoryBean.getObject().getId() + " " + " " + factoryBean.getObject().getBrand());
							Thread.sleep(46 * random.nextInt(5));
						} catch (Exception e) {
							e.printStackTrace();
						}
					}
				});
			}
			Thread.sleep(1000 * 4);
			ctx.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

 

其中: 配置文件的 scope="singleton/prototype" 配置 会覆盖掉 cn.rayoo.spring.factorybean.CarFactoryBean.isSingleton() 方法的返回值, 所以是否单例以配置文件为准, 配置文件如果没有声明, 则以FactoryBean.isSingleton()方法的返回值为准!

 

 

 

 

分享到:
评论

相关推荐

    spring的FactoryBean增强我们的目标对象.rar

    在标题“spring的FactoryBean增强我们的目标对象.rar”中,提到的核心概念就是如何利用`FactoryBean`来增强目标对象,从而在方法调用时使用代理类而不是原始对象。 `FactoryBean`是Spring中用于对象创建的一种高级...

    spring中FactoryBean中的getObject()方法实例解析

    Spring 中 FactoryBean 中的 getObject() 方法实例解析 Spring 框架中 FactoryBean 是一个非常重要的概念,它提供了一种创建和管理 Bean 的机制。在 Spring 中,FactoryBean 是一个特殊的 Bean,它可以创建其他 ...

    spring源码解析之FactoryBean相关测试代码demo

    在Spring框架中,`FactoryBean`是一个非常关键的接口,它允许我们自定义对象的创建方式,这在处理复杂依赖关系或需要特殊初始化逻辑时尤为有用。本篇将通过一个测试代码示例来深入解析`FactoryBean`的工作原理及其在...

    详解Spring中的FactoryBean

    在Spring框架中,`FactoryBean`是一个非常重要的接口,它为Spring容器提供了更高级别的抽象,使得我们可以自定义Bean的创建过程。当一个Bean的初始化需要处理复杂的逻辑、依赖其他多个Bean,或者需要进行特殊处理时...

    Spring中的FactoryBean.rar

    综上所述,"Spring中的FactoryBean.rar"文件所涵盖的内容可能涉及FactoryBean的接口定义、应用场景、使用方法以及如何自定义FactoryBean等方面。通过学习这部分内容,开发者能够更好地理解Spring IoC容器的工作原理...

    spring中的FactoryBean代码示例

    Spring中的FactoryBean代码示例 在Spring框架中,FactoryBean是一种特殊的Bean,它可以生成其他Bean的实例。今天我们来了解一下FactoryBean的实现和使用。 首先,让我们从SessionFactory说起。在使用SSH集成开发时...

    简单了解Spring中BeanFactory与FactoryBean的区别

    例如,在Spring MVC中,我们可以使用BeanFactory来管理Controller Bean的生命周期,而使用FactoryBean来生成视图解析器的实例。 BeanFactory和FactoryBean都是Spring框架中的重要组件,它们提供了不同的功能和机制...

    FactoryBean代码最简实现

    本篇我们将深入探讨`FactoryBean`的最简实现及其在Spring配置文件中的使用,帮助你理解其实例化过程。 `FactoryBean`是Spring框架提供的一种扩展点,它允许我们自定义对象的创建逻辑,而不仅仅是简单的通过`new`...

    SpringFactoryBean:spring FactoryBean的样本,在运行时在两个bean之间进行更改

    在Spring框架中,`FactoryBean`是一个非常重要的接口,它允许开发者自定义bean的创建逻辑。这个接口使得Spring容器能够根据特定的工厂方法来实例化对象,而不是通过默认的构造函数。`SpringFactoryBean`的例子在处理...

    深入了解Spring中的FactoryBean

    深入了解Spring中的FactoryBean FactoryBean是一个非常重要的概念,在Spring框架中扮演着核心角色。...了解FactoryBean的概念和应用,可以帮助我们更好地使用Spring框架,开发更加复杂和灵活的业务系统。

    SSH笔记-通过实现FactoryBean接口来创建 Bean

    在Spring配置文件中,我们可以这样声明并使用`FactoryBean`: ```xml ``` 在上述配置中,`myBean`并不是`MyCustomObject`实例,而是`MyFactoryBean`的实例。如果需要获取`MyCustomObject`,我们需要通过`...

    spring如何通过FactoryBean配置Bean

    Spring 通过 FactoryBean 配置 Bean 在 Spring 框架中,FactoryBean 是一种特殊的 Bean,它可以实现复杂的 Bean 实例化逻辑。通过 FactoryBean,我们可以将复杂的实例化逻辑封装起来,使得 Bean 的配置更加灵活和...

    Spring中BeanFactory与FactoryBean接口的区别详解

    当你需要在Spring容器中创建更复杂、有特定初始化逻辑的对象时,可以使用FactoryBean。FactoryBean的实例本身就是一个Bean,而它的`getObject()`方法会返回用户真正想要的对象。 FactoryBean接口定义了以下方法: ...

    SpringQuartz的使用文档

    Spring对Quartz进行了集成,使其更易于在Spring应用程序中使用。Spring提供了`FactoryBean`类,如`SchedulerFactoryBean`,用于创建和管理Quartz的`Scheduler`实例。这使得我们可以利用Spring的依赖注入(DI)和管理...

    Spring BeanFactory和FactoryBean区别解析

    Spring BeanFactory和FactoryBean的区别解析 Spring框架中,BeanFactory和FactoryBean是两个非常重要的概念,它们都是Spring IoC容器的核心组件。今天,我们将深入探讨这两个概念之间的区别和联系。 首先,让我们...

    spring6pdf详细讲解

    Spring 提供了多种方式来实例化和管理 Bean,包括通过构造方法、简单工厂模式、FactoryBean 等。 Spring 还提供了多种范围的 Bean,包括 singleton、prototype 等。 Spring 的 IoC 容器是框架的核心组件,它负责...

    Spring 使用注解配置使用ehcache

    本文将深入探讨如何在Spring中使用注解来配置Ehcache。 首先,我们需要在项目中引入Ehcache的相关依赖。如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;net.sf.ehcache&lt;/groupId&gt; ...

    spring4示例代码

    spring-2 演示了外部配置文件的引入(connection),spel(spring el)表达式 ,静态工厂方式及实例工厂方式及factorybean方式创建bean, spring的生命周期及BeanPostProcessor的使用,注解方式创建bean 及使用...

    FactoryBean.zip

    `FactoryBean`的使用使得我们可以控制对象的创建过程,甚至可以在对象被Spring管理的同时,添加额外的初始化或者装配步骤。在这个"FactoryBean.zip"中,很可能是包含了关于如何使用`FactoryBean`来实现特定功能的...

    spring ioc使用教程

    Spring支持使用FactoryBean来创建更复杂的对象。FactoryBean实现了特定接口,能返回一个或多个对象。 10. **自动装配实验**: Spring允许通过`autowire`属性实现自动装配,比如`byType`和`byName`,让Spring自动...

Global site tag (gtag.js) - Google Analytics