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”中,提到的核心概念就是如何利用`FactoryBean`来增强目标对象,从而在方法调用时使用代理类而不是原始对象。 `FactoryBean`是Spring中用于对象创建的一种高级...
Spring 中 FactoryBean 中的 getObject() 方法实例解析 Spring 框架中 FactoryBean 是一个非常重要的概念,它提供了一种创建和管理 Bean 的机制。在 Spring 中,FactoryBean 是一个特殊的 Bean,它可以创建其他 ...
在Spring框架中,`FactoryBean`是一个非常关键的接口,它允许我们自定义对象的创建方式,这在处理复杂依赖关系或需要特殊初始化逻辑时尤为有用。本篇将通过一个测试代码示例来深入解析`FactoryBean`的工作原理及其在...
在Spring框架中,`FactoryBean`是一个非常重要的接口,它为Spring容器提供了更高级别的抽象,使得我们可以自定义Bean的创建过程。当一个Bean的初始化需要处理复杂的逻辑、依赖其他多个Bean,或者需要进行特殊处理时...
综上所述,"Spring中的FactoryBean.rar"文件所涵盖的内容可能涉及FactoryBean的接口定义、应用场景、使用方法以及如何自定义FactoryBean等方面。通过学习这部分内容,开发者能够更好地理解Spring IoC容器的工作原理...
Spring中的FactoryBean代码示例 在Spring框架中,FactoryBean是一种特殊的Bean,它可以生成其他Bean的实例。今天我们来了解一下FactoryBean的实现和使用。 首先,让我们从SessionFactory说起。在使用SSH集成开发时...
例如,在Spring MVC中,我们可以使用BeanFactory来管理Controller Bean的生命周期,而使用FactoryBean来生成视图解析器的实例。 BeanFactory和FactoryBean都是Spring框架中的重要组件,它们提供了不同的功能和机制...
本篇我们将深入探讨`FactoryBean`的最简实现及其在Spring配置文件中的使用,帮助你理解其实例化过程。 `FactoryBean`是Spring框架提供的一种扩展点,它允许我们自定义对象的创建逻辑,而不仅仅是简单的通过`new`...
在Spring框架中,`FactoryBean`是一个非常重要的接口,它允许开发者自定义bean的创建逻辑。这个接口使得Spring容器能够根据特定的工厂方法来实例化对象,而不是通过默认的构造函数。`SpringFactoryBean`的例子在处理...
深入了解Spring中的FactoryBean FactoryBean是一个非常重要的概念,在Spring框架中扮演着核心角色。...了解FactoryBean的概念和应用,可以帮助我们更好地使用Spring框架,开发更加复杂和灵活的业务系统。
在Spring配置文件中,我们可以这样声明并使用`FactoryBean`: ```xml ``` 在上述配置中,`myBean`并不是`MyCustomObject`实例,而是`MyFactoryBean`的实例。如果需要获取`MyCustomObject`,我们需要通过`...
Spring 通过 FactoryBean 配置 Bean 在 Spring 框架中,FactoryBean 是一种特殊的 Bean,它可以实现复杂的 Bean 实例化逻辑。通过 FactoryBean,我们可以将复杂的实例化逻辑封装起来,使得 Bean 的配置更加灵活和...
当你需要在Spring容器中创建更复杂、有特定初始化逻辑的对象时,可以使用FactoryBean。FactoryBean的实例本身就是一个Bean,而它的`getObject()`方法会返回用户真正想要的对象。 FactoryBean接口定义了以下方法: ...
Spring对Quartz进行了集成,使其更易于在Spring应用程序中使用。Spring提供了`FactoryBean`类,如`SchedulerFactoryBean`,用于创建和管理Quartz的`Scheduler`实例。这使得我们可以利用Spring的依赖注入(DI)和管理...
Spring BeanFactory和FactoryBean的区别解析 Spring框架中,BeanFactory和FactoryBean是两个非常重要的概念,它们都是Spring IoC容器的核心组件。今天,我们将深入探讨这两个概念之间的区别和联系。 首先,让我们...
Spring 提供了多种方式来实例化和管理 Bean,包括通过构造方法、简单工厂模式、FactoryBean 等。 Spring 还提供了多种范围的 Bean,包括 singleton、prototype 等。 Spring 的 IoC 容器是框架的核心组件,它负责...
本文将深入探讨如何在Spring中使用注解来配置Ehcache。 首先,我们需要在项目中引入Ehcache的相关依赖。如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml <groupId>net.sf.ehcache</groupId> ...
spring-2 演示了外部配置文件的引入(connection),spel(spring el)表达式 ,静态工厂方式及实例工厂方式及factorybean方式创建bean, spring的生命周期及BeanPostProcessor的使用,注解方式创建bean 及使用...
`FactoryBean`的使用使得我们可以控制对象的创建过程,甚至可以在对象被Spring管理的同时,添加额外的初始化或者装配步骤。在这个"FactoryBean.zip"中,很可能是包含了关于如何使用`FactoryBean`来实现特定功能的...
Spring支持使用FactoryBean来创建更复杂的对象。FactoryBean实现了特定接口,能返回一个或多个对象。 10. **自动装配实验**: Spring允许通过`autowire`属性实现自动装配,比如`byType`和`byName`,让Spring自动...