Spring 工厂方式 创建bean实例
2015-03-03 15:04
453 查看
摘自:http://layznet.iteye.com/blog/906619
很多情况下使用<bean id=”bean1” class=”…” />定义一个bean,这种定义方式Spring将会调用默认的无参数构造方法创建Bean实例。除此之外还可以使用工厂方式创建Bean实例,实现Bean创建与使用的分离,将Bean创建工作交由工厂来完成。
配置工厂Bean的三种方式。
抽象接口:
Java代码
public interface IMusicBox {
public void play();
}
1、静态工厂方法取得Bean实例
工厂类:
Java代码
public class MusicBoxFactory {
public static IMusicBox createMusicBox(){
return new IMusicBox(){
public void play(){
System.out.println("Play piano...");
}
};
}
}
配置文件:
Xml代码
<bean id="musicBox" class="test.spring.MusicBoxFactory" factory-method="createMusicBox" />
测试类:
Java代码
public static void main(String[] args) {
ApplicationContext ctx =
new ClassPathXmlApplicationContext("bean-config.xml");
IMusicBox musicbox = (IMusicBox)ctx.getBean("musicBox");
musicbox.play();
}
2、工厂实例的方法取得Bean实例
工厂类:
Java代码
public class MusicBoxFactory {
public IMusicBox createMusicBox(){//没有static修饰
return new IMusicBox(){
public void play(){
System.out.println("Play piano...");
}
};
}
}
配置文件:
Xml代码
<bean id="factoryBean" class="test.spring.MusicBoxFactory" />
<bean id="musicBox" factory-bean="factoryBean" factory-method="createMusicBox" />
“factory-bean”属性指定工厂Bean,”factory-method”属性指定工厂方法来取得Bean实例。
测试类:
Java代码
public static void main(String[] args) {
ApplicationContext ctx =
new ClassPathXmlApplicationContext("bean-config.xml");
IMusicBox musicbox = (IMusicBox)ctx.getBean("musicBox");
musicbox.play();
}
3、工厂类实现org.springframework.beans.factory.FacotryBean接口
工厂类:
Java代码
import org.springframework.beans.factory.FactoryBean;
public class MusicBoxFactory2 implements FactoryBean {
public Object getObject() throws Exception {
return new IMusicBox(){
public void play(){
System.out.println("Play piano...");
}
};
}
public Class getObjectType() {
return IMusicBox.class;
}
public boolean isSingleton() {
return false;
}
}
配置文件:
Xml代码
<bean id="musicBox" class="test.spring.MusicBoxFactory2"/>
测试类:
Java代码
public static void main(String[] args) {
ApplicationContext ctx =
new ClassPathXmlApplicationContext("bean-config.xml");
//不加 & 返回工厂的“产品”
IMusicBox musicbox = (IMusicBox)ctx.getBean("musicBox");
musicbox.play();
//加 & 返回工厂类实例
Object obj = ctx.getBean("&musicBox");
System.out.println(obj.getClass().getName());
}
实现FactoryBean接口的类不会被视为普通的Bean,Spring会自动检测,调用getObject方法获取Bean实例
很多情况下使用<bean id=”bean1” class=”…” />定义一个bean,这种定义方式Spring将会调用默认的无参数构造方法创建Bean实例。除此之外还可以使用工厂方式创建Bean实例,实现Bean创建与使用的分离,将Bean创建工作交由工厂来完成。
配置工厂Bean的三种方式。
抽象接口:
Java代码
public interface IMusicBox {
public void play();
}
1、静态工厂方法取得Bean实例
工厂类:
Java代码
public class MusicBoxFactory {
public static IMusicBox createMusicBox(){
return new IMusicBox(){
public void play(){
System.out.println("Play piano...");
}
};
}
}
配置文件:
Xml代码
<bean id="musicBox" class="test.spring.MusicBoxFactory" factory-method="createMusicBox" />
测试类:
Java代码
public static void main(String[] args) {
ApplicationContext ctx =
new ClassPathXmlApplicationContext("bean-config.xml");
IMusicBox musicbox = (IMusicBox)ctx.getBean("musicBox");
musicbox.play();
}
2、工厂实例的方法取得Bean实例
工厂类:
Java代码
public class MusicBoxFactory {
public IMusicBox createMusicBox(){//没有static修饰
return new IMusicBox(){
public void play(){
System.out.println("Play piano...");
}
};
}
}
配置文件:
Xml代码
<bean id="factoryBean" class="test.spring.MusicBoxFactory" />
<bean id="musicBox" factory-bean="factoryBean" factory-method="createMusicBox" />
“factory-bean”属性指定工厂Bean,”factory-method”属性指定工厂方法来取得Bean实例。
测试类:
Java代码
public static void main(String[] args) {
ApplicationContext ctx =
new ClassPathXmlApplicationContext("bean-config.xml");
IMusicBox musicbox = (IMusicBox)ctx.getBean("musicBox");
musicbox.play();
}
3、工厂类实现org.springframework.beans.factory.FacotryBean接口
工厂类:
Java代码
import org.springframework.beans.factory.FactoryBean;
public class MusicBoxFactory2 implements FactoryBean {
public Object getObject() throws Exception {
return new IMusicBox(){
public void play(){
System.out.println("Play piano...");
}
};
}
public Class getObjectType() {
return IMusicBox.class;
}
public boolean isSingleton() {
return false;
}
}
配置文件:
Xml代码
<bean id="musicBox" class="test.spring.MusicBoxFactory2"/>
测试类:
Java代码
public static void main(String[] args) {
ApplicationContext ctx =
new ClassPathXmlApplicationContext("bean-config.xml");
//不加 & 返回工厂的“产品”
IMusicBox musicbox = (IMusicBox)ctx.getBean("musicBox");
musicbox.play();
//加 & 返回工厂类实例
Object obj = ctx.getBean("&musicBox");
System.out.println(obj.getClass().getName());
}
实现FactoryBean接口的类不会被视为普通的Bean,Spring会自动检测,调用getObject方法获取Bean实例
相关文章推荐
- spring创建bean的三种方式-通过构造器,通过静态工厂方法,通过实例工厂方法
- Spring学习--静态工厂方法、实例工厂方法创建 Bean
- Spring入门学习——调用一个实例工厂方法创建Bean
- Spring使用实例工厂方法创建Bean(一)
- 【spring NOTE】调用实例工厂方法创建Bean
- 7.7.3: Bean实例的创建方式及依赖配置---调用实例工厂方法创建Bean
- 7.7.2: Bean实例的创建方式及依赖配置---使用静态工厂方法创建Bean
- 先码后看 spring配置bean的几种方式:xml直接配置、静态工厂、实例工厂、factory bean、注解 侵立删
- 创建Bean的三种方式 在大多数情况下,Spring容器直接通过new关键字调用构造器来创建Bean实例,而class属性指定Bean实例的实现类,但这不是实例化Bean的唯一方法。实际上,Sprin
- Spring工厂方法创建(实例化)bean实例代码
- Spring创建Bean实例的3种方式
- Spring静态工厂和实例工厂创建bean
- Bean工厂实例的创建方式
- [原创]java WEB学习笔记102:Spring学习---Spring Bean配置:bean配置方式(工厂方法(静态工厂方法 & 实例工厂方法)、FactoryBean) 全类名
- Spring-----7、bean实例的创建方式及依赖配置
- Spring中bean工厂创建bean的三种方式
- Spring(3.2.3) - Beans(3): Bean 实例的创建方式
- Spring创建Bean实例的三种方法
- spring实例化bean的三种方式
- Spring中的Bean实现的创建三种方式