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音乐...
分享到:
相关推荐
Spring IOC 04 配置通过静态工厂方法创建的bean、实例工厂创建的bean、FactoryBean (1)bean的创建默认就是框架利用反射new出来的bean实例; (2)工厂模式:工厂帮我们创建对象,有一个专门帮我们创建对象的类,这...
调用实例工厂方法创建bean,与调用静态工厂方法创建bean 的用法基本相似。 区别如下: ·调用实例工厂方法创建bean 时,必须将实例工厂配置成bean 实例。 而静态工厂方法则无须配置工厂bean。 ·调用实例工厂方法...
主要介绍了Spring实战之使用静态工厂方法创建Bean操作,结合实例形式分析了静态工厂方法创建Bean的相关实现步骤与操作注意事项,需要的朋友可以参考下
Spring项目bean实例化代码,包括bean是如何创建的;实例化bean的三种方式,构造方法,静态工厂和实例工厂。
实例化Bean有三种方式,分别为构造器实例化、静态工厂方式实例化和实例工厂方式实例化(其中最常用的是构造器实例化)。 2.2.1 构造器实例化 创建Web项目,导入相关Jar包; 创建名为Bean1的Java类; 创建Spring配置...
spring-2 演示了外部配置文件的引入(connection),spel(spring el)表达式 ,静态工厂方式及实例工厂方式及factorybean方式创建bean, spring的生命周期及BeanPostProcessor的使用,注解方式创建bean 及使用...
Spring Spel表达式,使用静态工厂创建Bean,调用实例工厂创建Bean,组件装配
* 利用静态工厂方法 * 利用实例工厂方法 * 时机 * lazy-init为“default/false”当启动spring容器的时候创建bean 但是如果该bean是prototype时,特殊。这种情况无效 * 在spring容器启动的时候,就会发现错误 ...
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...
ClassPathXmlApplicationContext:使用这个工厂创建对象,他会根据scope智能判断是否懒加载,如果是单例则创建容器时就会创建里面bean的实例,如果是多例在获取使用时才会创建bean实例 ...
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...
简单介绍Ssm框架中spring中的控制反转,即IOC。里面包含静态工厂,实例工厂加载方法,还有bean的创建和对bean的操作,加入注解等操作,还自己配置了一个Date和String时间转化器
当客户机第一次调用一个Stateful Session Bean 时,容器必须立即在服务器中创建一个新的Bean实例,并关联到客户机上,以后此客户机调用Stateful Session Bean 的方法时容器会把调用分派到与此客户机相关联的Bean实例...
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 方法...
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 方法...
派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。 3.封装: 封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即...
33、静态变量和实例变量的区别? 11 34、是否可以从一个static 方法内部发出对非static 方法的调用? 11 35、写clone()方法时,通常都有一行代码,是什么? 11 36、GC 是什么? 为什么要有GC? 11 37、垃圾回收的优点...
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 从对象属性中...
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 从对象属性中...
33、静态变量和实例变量的区别? 11 34、是否可以从一个static 方法内部发出对非static 方法的调用? 11 35、写clone()方法时,通常都有一行代码,是什么? 11 36、GC 是什么? 为什么要有GC? 11 37、垃圾回收的优点...