在面向对象程序中,如要使用某个对象,就需要先实例化这个对象。同样的,在Spring中,要想使用容器中的Bean,也需要实例化Bean。实例化Bean有三种方式,分别是:构造器实例化、静态工厂实例化、实例工厂方式实例化。

构造器实例化 : 构造器实例化是指Spring容器通过Bean对应类中默认的无参构造方法来实例化Bean。

(1)创建一个Bean1类

 public class Bean1 {
public void say() {
System.out.println("Bean1 by Construtor !");
}
}

(2)配置xml文件

<bean id="bean1" class="constructor.Bean1" />

(3)创建一个测试类测试是否能实例化Bean1

 public class Test1 {

     public static void main(String[] args) {
// TODO Auto-generated method stub
ClassPathXmlApplicationContext context =
new ClassPathXmlApplicationContext("applicationContext.xml");
Bean1 bean1 = (Bean1)context.getBean("bean1");
bean1.say();
context.close();
} }

   静态工厂方式实例化

(1)创建一个Bean2类

 public class Bean2 {
public void say() {
System.out.println("Bean2 by StaticFactory !");
}
}

(2)创建一个MyBean2Factory类,并创建一个静态方法createBean()来返回Bean2实例

 public class MyBean2Factory {
public static Bean2 createBean() {
return new Bean2();
}
}

(3)配置XML文件

 <bean id="bean2" class="static_factory.MyBean2Factory" factory-method="createBean" />

  实例工厂方式实例化

(1)创建一个Bean3类

 public class Bean3 {
public void say() {
System.out.println("Bean3 by Factory !");
}
}

(2)创建一个MyBean3Factory类,并创建一个静态方法createBean()来返回Bean2实例

 public class MyBean3Factory {
public Bean3 createBean() {
return new Bean3();
}
}

(3)配置XML文件

   <!-- 配置工厂 -->
<bean id="myBean3Factory" class="factory.MyBean3Factory" />
<!-- 使用factory-bean 属性指向配置的实例工厂 -->
<bean id="bean3" factory-bean="myBean3Factory" factory-method="createBean"/>

  三种实例化方式的区别

  构造器实例化:通过无参构造的方法实例化Bean,其实质是将Bean对应的类交给Spring自带的工厂(BeanFactory)管理,由Spring自带的工厂模式帮我们创建和维护这个类

  静态工厂方式实例化:通过静态工厂创建并返回Bean。其实质是将Bean对应的类交给我们自己的静态工厂管理。Spring只是帮我们调用了静态工厂创建实例的方法。运用:很多时候我们在使用第三方jar包提供给我们的类时,由于这个类没有构造方法,是通过第三方包提供的静态工厂创建的,如果我们想把第三方jar包里面的这个类交由Spring来管理的话,就可以使用Spring提供的静态工厂创建实例的配置。

  实例工厂方式实例化:通过实例工厂创建并返回Bean,其实质就是把创建实例的工厂类和调用工厂类的方法创建实例的方法的过程也交由Spring管理,创建实例的这个过程也是由我们自己配置的实例工厂内部实现的。运用:如Spring整合Hibernate就是通过这种方式实现的。但对于没有与Spring整合过的工厂类,我们一般都是自己用代码来管理的。

最新文章

  1. ABP(现代ASP.NET样板开发框架)系列之20、ABP展现层——动态生成WebApi
  2. css之滚动条
  3. 【android Studio】零git知识、零脚本命令,即刻体验git版本管理魅力!
  4. python学习笔记六 面向对象相关下(基础篇)
  5. Dean Edwards大神写的addEvent库
  6. LogHelper拾遗
  7. CMOS、BIOS
  8. cdoj 1255 斓少摘苹果 贪心
  9. velocity语法
  10. Android Sutido 编译速度优化
  11. javascript技巧合集
  12. visual studio 2012更换皮肤、功能添加
  13. C#中Predicate的一点理解
  14. ROS开发文档
  15. Show 一下最新的动态属性扩展功能与键值生成器功能
  16. Jungle Roads(kruskar)
  17. 三大家族,offset,scroll,client
  18. Go 1.11 Module 介绍
  19. C#winform自定义控件大全
  20. android之WIFI小车编程详述

热门文章

  1. 1 课务 iOS 概述
  2. 1卸载ROS
  3. hive on tez 错误记录
  4. l2_multi.py
  5. 十一月百度杯pwnme 详细wp
  6. arcgis python 调用工具两种两种方法
  7. Coroutine 协程
  8. Send me - PLANETSHAKERS
  9. opencv 检测人脸、人眼
  10. 简易的CRM系统案例之易的CRM系统案例之JSP+MySQL+SSH框架版本