很多情况下使用<bean id=”bean1” class=”…” />定义一个bean,这种定义方式Spring将会调用默认的无参数构造方法创建Bean实例。除此之外还可以使用工厂方式创建Bean实例,实现Bean创建与使用的分离,将Bean创建工作交由工厂来完成。
配置工厂Bean的三种方式。
抽象接口:
public interface IMusicBox {
public void play();
}
1、静态工厂方法取得Bean实例
工厂类:
public class MusicBoxFactory {
public static IMusicBox createMusicBox(){
return new IMusicBox(){
public void play(){
System.out.println("Play piano...");
}
};
}
}
配置文件:
<bean id="musicBox" class="test.spring.MusicBoxFactory" factory-method="createMusicBox" />
测试类:
public static void main(String[] args) {
ApplicationContext ctx =
new ClassPathXmlApplicationContext("bean-config.xml");
IMusicBox musicbox = (IMusicBox)ctx.getBean("musicBox");
musicbox.play();
}
2、工厂实例的方法取得Bean实例
工厂类:
public class MusicBoxFactory {
public IMusicBox createMusicBox(){//没有static修饰
return new IMusicBox(){
public void play(){
System.out.println("Play piano...");
}
};
}
}
配置文件:
<bean id="factoryBean" class="test.spring.MusicBoxFactory" />
<bean id="musicBox" factory-bean="factoryBean" factory-method="createMusicBox" />
“factory-bean”属性指定工厂Bean,”factory-method”属性指定工厂方法来取得Bean实例。
测试类:
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接口
工厂类:
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;
}
}
配置文件:
<bean id="musicBox" class="test.spring.MusicBoxFactory2"/>
测试类:
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实例!
(1)bean的创建默认就是框架利用反射new出来的bean实例; (2)工厂模式:工厂帮我们创建对象,有一个专门帮我们创建对象的类,这个类就是工厂。 如:AirPlane ap = AirPlaneFactory.getAirPlane(String jzName); ...
Spring项目bean实例化代码,包括bean是如何创建的;实例化bean的三种方式,构造方法,静态工厂和实例工厂。
·调用实例工厂方法创建bean 时,必须将实例工厂配置成bean 实例。 而静态工厂方法则无须配置工厂bean。 ·调用实例工厂方法创建bean 时,必须使用factory-bean 属性来确定工厂bean。 而静态工厂方法则使用...
NULL 博文链接:https://88548886.iteye.com/blog/1682243
Spring的三种实例化Bean的方式
Spring 实例化Bean的三种方式
主要介绍了Spring实战之使用静态工厂方法创建Bean操作,结合实例形式分析了静态工厂方法创建Bean的相关实现步骤与操作注意事项,需要的朋友可以参考下
通过Spring上下文获取bean的实例对象
本篇文章主要介绍了详解Spring中bean实例化的三种方式,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
spring管理bean应用实例代码;spring管理bean应用实例代码
博客地址:https://blog.csdn.net/u010476739/article/details/76732201 spring装配bean的方式实例
主要介绍了Spring实战之调用实例工厂方法创建Bean操作,结合实例形式分析了实例工厂方法创建Bean相关配置、实现方法及操作注意事项,需要的朋友可以参考下
通过构造器或工厂方法创建Bean实例 为Bean的属性设置值和对其它Bean的引用 调用Bean的初始化方法 Bean可以使用了 当容器关闭时,调用Bean的销毁方法 在 Bean 的声明里设置 init-method 和 destroy-method 属性, 为 ...
7. 创建bean实例的方式 8. Spring中Bean实例的设计 9. 创建Bean实例的时间 10. 自动装配(不建议使用) 11. 依赖检查 12. 定义IoC容器管理的javabean的生命周期回调方法 13. 接口FactoryBean的使用
通过实例工厂方法和静态工厂方法实例化spring bean的例子。
spring-2 演示了外部配置文件的引入(connection),spel(spring el)表达式 ,静态工厂方式及实例工厂方式及factorybean方式创建bean, spring的生命周期及BeanPostProcessor的使用,注解方式创建bean 及使用...
SSH笔记-静态工厂方法配置bean和实例工厂方法配置bean
NULL 博文链接:https://bijian1013.iteye.com/blog/2384411