`
left.jessica
  • 浏览: 32164 次
  • 性别: Icon_minigender_2
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

使用静态工厂方法和实例工厂方法创建Bean

阅读更多

1、使用静态工厂方法创建Bean

 

首先,静态工厂:

public class MusicBoxFactory {
	
	// 工厂方法
	public static IMusicBox createMusicBox(){
		return new IMusicBox(){
			public void play(){
				System.out.println("播放钢琴音乐...");
			}
		};
	}

}

 

该静态方法创建一个IMusicBox接口的实例

则,在xml配置文件中,做如下配置:

<bean id="musicBox" class="onlyfun.caterpillar.MusicBoxFactory" factory-method="createMusicBox"/>

 

这里定义的musicBox指的是由静态方法创建出来的IMusicBox实例

 

2、使用实例工厂方法创建Bean

实例工厂代码如下:

public class SomeFactory {
	
	public IMusicBox createInstance(){
		return new IMusicBox(){
			public void play(){
				System.out.println("播放piano音乐...");
			}
		};
		
	}

}

 实例工厂没有静态工厂方法,所以首先要创建出实例工厂本身的对象,再调用对象的createInstance()工厂方法创建目标对象,所以XML配置为:

	<bean id="factoryBean" class="onlyfun.caterpillar.SomeFactory"/>
	<bean id="some" factory-bean="factoryBean" factory-method="createInstance"/>

 

第一句,先定义了实例工厂,然后通过对ID为some的bean的获取,先创建实例工厂对象,再调用工厂对象的工厂方法创建目标对象,此时无需指定bean的class属性。

 

测试代码:

public class SpringDemo {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		ApplicationContext context = new ClassPathXmlApplicationContext("beans-config.xml");
		IMusicBox musicBox = (IMusicBox)context.getBean("musicBox");
		musicBox.play();
		
		IMusicBox musicBox2 = (IMusicBox)context.getBean("some");
		musicBox2.play();

	}

}

 

打印出结果:

播放钢琴音乐...
播放piano音乐...

 

 

分享到:
评论

相关推荐

    09-IoC配置-静态工厂与实例工厂创建bean

    Spring IOC 04 配置通过静态工厂方法创建的bean、实例工厂创建的bean、FactoryBean (1)bean的创建默认就是框架利用反射new出来的bean实例; (2)工厂模式:工厂帮我们创建对象,有一个专门帮我们创建对象的类,这...

    spring 实例的工厂方法 依赖注入属性,都使用property 元素确

    调用实例工厂方法创建bean,与调用静态工厂方法创建bean 的用法基本相似。 区别如下: ·调用实例工厂方法创建bean 时,必须将实例工厂配置成bean 实例。 而静态工厂方法则无须配置工厂bean。 ·调用实例工厂方法...

    Spring实战之使用静态工厂方法创建Bean操作示例

    主要介绍了Spring实战之使用静态工厂方法创建Bean操作,结合实例形式分析了静态工厂方法创建Bean的相关实现步骤与操作注意事项,需要的朋友可以参考下

    Spring项目bean实例化代码

    Spring项目bean实例化代码,包括bean是如何创建的;实例化bean的三种方式,构造方法,静态工厂和实例工厂。

    基于java的企业级应用开发:Bean的实例化.ppt

    实例化Bean有三种方式,分别为构造器实例化、静态工厂方式实例化和实例工厂方式实例化(其中最常用的是构造器实例化)。 2.2.1 构造器实例化 创建Web项目,导入相关Jar包; 创建名为Bean1的Java类; 创建Spring配置...

    spring4示例代码

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

    Springtest02.rar

    Spring Spel表达式,使用静态工厂创建Bean,调用实例工厂创建Bean,组件装配

    spring.xls

    * 利用静态工厂方法 * 利用实例工厂方法 * 时机 * lazy-init为“default/false”当启动spring容器的时候创建bean 但是如果该bean是prototype时,特殊。这种情况无效 * 在spring容器启动的时候,就会发现错误 ...

    Spring 3 Reference中文

    4.3.2.3 使用实例工厂方法来实例化.. 37 4.4 依赖 38 4.4.1 依赖注入. 38 4.4.1.1 基于构造方法的依赖注入 39 4.4.1.2 基于setter 方法的依赖注入 41 4.4.1.3 解决依赖过程.. 42 4.4...

    Spring.html

    ClassPathXmlApplicationContext:使用这个工厂创建对象,他会根据scope智能判断是否懒加载,如果是单例则创建容器时就会创建里面bean的实例,如果是多例在获取使用时才会创建bean实例 ...

    spring.doc

    3.3.2使用静态工厂方法实例化(简单工厂模式) 14 3.3.3初始化(创建)bean时机 15 Lazy-init初始化bean的时机拓展: 15 3.4 Bean的作用域 16 Scope单例多例作用域拓展: 16 3.4.1 singleton(默认值) 16 3.4.2 prototype...

    Spring 依赖注入

    简单介绍Ssm框架中spring中的控制反转,即IOC。里面包含静态工厂,实例工厂加载方法,还有bean的创建和对bean的操作,加入注解等操作,还自己配置了一个Date和String时间转化器

    超级有影响力霸气的Java面试题大全文档

    当客户机第一次调用一个Stateful Session Bean 时,容器必须立即在服务器中创建一个新的Bean实例,并关联到客户机上,以后此客户机调用Stateful Session Bean 的方法时容器会把调用分派到与此客户机相关联的Bean实例...

    Spring.3.x企业应用开发实战(完整版).part2

    4.3.3 工厂方法注入 4.3.4 选择注入方式的考量 4.4 注入参数详解 4.4.1 字面值 4.4.2 引用其他Bean 4.4.3 内部Bean 4.4.4 null值 4.4.5 级联属性 4.4.6 集合类型属性 4.4.7 简化配置方式 4.4.8 自动装配 4.5 方法...

    Spring3.x企业应用开发实战(完整版) part1

    4.3.3 工厂方法注入 4.3.4 选择注入方式的考量 4.4 注入参数详解 4.4.1 字面值 4.4.2 引用其他Bean 4.4.3 内部Bean 4.4.4 null值 4.4.5 级联属性 4.4.6 集合类型属性 4.4.7 简化配置方式 4.4.8 自动装配 4.5 方法...

    java 面试题 总结

    派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。 3.封装: 封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即...

    千方百计笔试题大全

    33、静态变量和实例变量的区别? 11 34、是否可以从一个static 方法内部发出对非static 方法的调用? 11 35、写clone()方法时,通常都有一行代码,是什么? 11 36、GC 是什么? 为什么要有GC? 11 37、垃圾回收的优点...

    Spring攻略(第二版 中文高清版).part2

    2.2 调用一个实例工厂方法创建Bean 58 2.2.1 问题 58 2.2.2 解决方案 59 2.2.3 工作原理 59 2.3 从静态字段中声明Bean 60 2.3.1 问题 60 2.3.2 解决方案 60 2.3.3 工作原理 61 2.4 从对象属性中...

    Spring攻略(第二版 中文高清版).part1

    2.2 调用一个实例工厂方法创建Bean 58 2.2.1 问题 58 2.2.2 解决方案 59 2.2.3 工作原理 59 2.3 从静态字段中声明Bean 60 2.3.1 问题 60 2.3.2 解决方案 60 2.3.3 工作原理 61 2.4 从对象属性中...

    java面试宝典

    33、静态变量和实例变量的区别? 11 34、是否可以从一个static 方法内部发出对非static 方法的调用? 11 35、写clone()方法时,通常都有一行代码,是什么? 11 36、GC 是什么? 为什么要有GC? 11 37、垃圾回收的优点...

Global site tag (gtag.js) - Google Analytics