`
sungang_1120
  • 浏览: 323473 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类

使用Spring的FactoryBean用法

阅读更多

 

前提在使用Spring集成中,我们可以使用Spring提供的FactoryBean接口来实现Spring容器通过工厂来实例化对象。

 

Spring规范的标准Bean工厂接口。实现了FactoryBean接口的实例只能作为工厂类存在:

1,

public T getObject() throws Exception {}

 2,

public Class<?> getObjectType() {}

 3,

public boolean isSingleton() {}

 

下面是代码配置:

首先我们要实例化的对象:

package com.sg.spring.study.day1.create;

public class Session {
	public void save() {
		System.out.println("save session ....");
	}
}

 

需要产生实例的工厂:

package com.sg.spring.study.day1.create;

import org.springframework.beans.factory.FactoryBean;

public class SessionFactoryBean implements FactoryBean<Session> {

	//创建实例
	@Override
	public Session getObject() throws Exception {
		System.out.println("创建session的逻辑...");
		return new Session();
	}

	@Override
	public Class<?> getObjectType() {
		return Session.class;
	}
	
	//判断实例化时  是否使用单例模式
	
	@Override
	public boolean isSingleton() {
		return true;
	}

}

 

spring配置文件如下:

<bean id="session" class="com.sg.spring.study.day1.create.SessionFactoryBean"/>

 

测试 :

@Test
	public void test1() {
//		Resource resource = new ClassPathResource("application.xml");
//		BeanFactory factory = new XmlBeanFactory(resource);
		
		ApplicationContext ctx = new ClassPathXmlApplicationContext("application.xml");
		Session session = ctx.getBean("session", Session.class);
		
		System.out.println(session.getClass());
		//打印如下:
			//创建session的逻辑...
			//class com.sg.spring.study.day1.create.Session
		//session.save();
	}

 

 

我们还可以直接获取工厂类型:

@Test
	public void test1() {
//		Resource resource = new ClassPathResource("application.xml");
//		BeanFactory factory = new XmlBeanFactory(resource);
		
		ApplicationContext ctx = new ClassPathXmlApplicationContext("application.xml");
		Object obj = ctx.getBean("&session");
		
		System.out.println(obj.getClass());
		//打印如下:		
			//class com.sg.spring.study.day1.create.SessionFactoryBean
		//session.save();
	}

 

注意:

        1,我们在配置文件中配置的是factory,但得到的是工厂产生的bean的实例。

         2,通过session得到的是bean的实例,通过&session得到的是工厂的实例。

 

在spring中,很多对象都是使用了FactoryBean的方式来得到bean的实例,比如:Session,Transcation,EntityManager等。

 

使用FactoryBean的好处:我们只需在配置文件中通过一条配置就可以得到工厂方法实例和其生产bean的实例,而不需要像实例bean工厂那样配置两个bean。另外,bean工厂创键的bena实例的生命周期范围就交给了spring去管理,而不需要我们的factory自己来实现,

 

缺点:和Spring API集成

 

 

分享到:
评论

相关推荐

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

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

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

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

    详解Spring中的FactoryBean

    在Spring配置中,当我们引用一个`FactoryBean`时,Spring会识别到这个特殊的Bean,并调用`FactoryBean`的方法来获取最终的实例。例如,有一个`Person`类,它需要一个`Car`对象。在XML配置中,我们不需要直接声明`Car...

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

    Spring容器会调用`FactoryBean`的`getObject()`方法来获取实际的对象,而不是直接实例化`FactoryBean`本身。 下面我们将逐步分析`FactoryBean`的相关测试代码: 1. **配置文件(spring.xml)** 在Spring的XML配置...

    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`...

    深入了解Spring中的FactoryBean

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

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

    Spring容器会调用这些方法来决定如何处理由`FactoryBean`创建的bean。 在描述中提到的"在运行时在两个bean之间进行切换",这通常涉及到条件判断或策略模式。我们可以实现一个`FactoryBean`,在其`getObject()`方法...

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

    当你在Spring配置文件中声明一个Bean,并指定它的类型为`FactoryBean`的实现类时,Spring不会直接调用无参构造函数来创建Bean,而是调用`FactoryBean`的方法来获取Bean实例。 首先,我们需要了解`FactoryBean`的...

    FactoryBean.zip

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

    spring如何通过FactoryBean配置Bean

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

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

    在这个例子中,`UserServiceFactoryBean`实现了FactoryBean,当从Spring容器中请求`IUserService`类型的Bean时,实际上会通过`UserServiceFactoryBean`的`getObject()`方法返回一个`UserServiceImpl`实例。...

    使用 FactoryBean结合Jmock实现动态Mock类的注入

    `FactoryBean`的`getObject()`方法负责返回一个由工厂生产的对象,而Spring容器会将其视为真正的bean。在XML配置中,当声明一个bean为`FactoryBean`类型时,需要使用`&`符号来获取`FactoryBean`本身而不是它创建的...

    Spring BeanFactory和FactoryBean区别解析

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

    使用ImportBeanDefinitionRegistrar、JDK代理、FactoryBean模拟mybatis原理.zip

    当我们在配置类上使用`@Import`注解时,Spring会调用`ImportBeanDefinitionRegistrar`的`registerBeanDefinitions`方法,让我们有机会动态地向应用上下文注册bean定义。这对于实现框架级别的扩展,如自动扫描特定的...

    spring6pdf详细讲解

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

    SpringQuartz的使用文档

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

    mybatis-spring-1.3.3.jar官方下载

    4. **MapperFactoryBean**:它是 Spring 的 FactoryBean,用于实例化 Mapper 接口并注入到 Spring 容器。这样,我们可以在 Spring 环境中通过 DAO 接口直接调用 SQL 方法,而无需关心实现细节。 5. **Transaction ...

Global site tag (gtag.js) - Google Analytics