http://blog.csdn.net/yerenyuan_pku/article/details/52832793

Spring提供了三种实例化Bean的方式。

  • 使用类构造器实例化。

    <bean id="personService" class="cn.itcast.service.impl.PersonServiceBean"></bean>

    不难看出,我们以前使用的就是该方式。上面的配置默认使用的是PersonServiceBean类的默认构造函数来实例化PersonServiceBean对象的。

  • 使用静态工厂方法实例化。 
    我们在编码剖析Spring管理Bean的原理案例的基础上使用这种方式来实例化bean。 
    首先我们要在cn.itcast.service.impl包中创建一个工厂类——PersonServiceBeanFactory.java,其代码如下:

    public class PersonServiceBeanFactory {public static PersonServiceBean createPersonServiceBean() { return new PersonServiceBean(); } }

    然后修改Spring的配置文件为:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="personService" class="cn.itcast.service.impl.PersonServiceBean"></bean> <bean id="personService2" class=" cn.itcast.service.impl.PersonServiceBeanFactory" factory-method="createPersonServiceBean" /> </beans>

    最后,将SpringTest类的改为:

    public class SpringTest {@Testpublic void test() { // ApplicationContext是接口 ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml"); // 实例化Spring容器 PersonService personService = (PersonService) ctx.getBean("personService2"); // 从Spring容器取得bean personService.save(); } }

    测试test()方法,Eclipse控制台打印如下: 

  • 使用实例工厂方法实例化。 
    我们同样在编码剖析Spring管理Bean的原理案例的基础上使用这种方式来实例化bean。 
    首先我们要修改工厂类——PersonServiceBeanFactory.java的代码为:

    public class PersonServiceBeanFactory {public static PersonServiceBean createPersonServiceBean() { return new PersonServiceBean(); } public PersonServiceBean createPersonServiceBean2() { return new PersonServiceBean(); } }

    紧接着修改Spring的配置文件为:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="personService" class="cn.itcast.service.impl.PersonServiceBean"></bean> <bean id="personService2" class=" cn.itcast.service.impl.PersonServiceBeanFactory" factory-method="createPersonServiceBean" /> <bean id="personServiceBeanFactory" class="cn.itcast.service.impl.PersonServiceBeanFactory"></bean> <bean id="personService3" factory-bean="personServiceBeanFactory" factory-method="createPersonServiceBean2"></bean> </beans>

    最后,将SpringTest类的改为:

    public class SpringTest {@Testpublic void test() { // ApplicationContext是接口 ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml"); // 实例化Spring容器 PersonService personService = (PersonService) ctx.getBean("personService3"); // 从Spring容器取得bean personService.save(); } }

    测试test()方法,Eclipse控制台打印如下: 

Spring提供了三种实例化Bean的方式,那么到底该使用哪种方式较稳妥呢?应根据实际情况决定,但可这样说,90%的可能都是采用第一种方式,即使用类构造器实例化bean。源码可点击Spring的三种实例化Bean的方式进行下载。

转载于:https://www.cnblogs.com/telwanggs/p/6913045.html

(转)Spring的三种实例化Bean的方式相关推荐

  1. Spring中三种配置Bean的方式

    1.使用xml配置文件 由Spring Framework本身决定,此处不详细说. 2.使用Java注解的配置 如果一个类使用了@Service,那么此类将自动注册成一个bean,不需要再在appli ...

  2. Spring的三种Bean的实例化方法

    (本文内容有网上+自己修改,如有错误,请指正,谢谢.) 在spring中实例化bean的方式: 一.使用构造器实例化: 这种实例化的方式可能在我们平时的开发中用到的是最多的,因为在xml文件中配置简单 ...

  3. Spring的三种注入方式(为什么推荐构造器注入?)

    Spring的三种注入方式 一.属性注入 @Resource和@Autowired的区别 为什么尽量使用 @Resource? 二.setter 注入 三.构造器注入 具体可以看看Spring官网 为 ...

  4. Spring 异常处理三种方式

    Spring 异常处理三种方式 异常处理方式一. @ExceptionHandler 异常处理方式二. 实现HandlerExceptionResolver接口 异常处理方式三. @Controlle ...

  5. Spring的三种事务控制

    Spring的三种方式的事务控制 1:基于编程式的事务控制 1.1:编程式事务控制相关对象 PlatformTransactionManager接口是spring的事务管理器,他里面提供了我们常用的操 ...

  6. Class java用法,java中Class的三种实例化

    1.调用Object类中的getClass()方法:import java.util.Date; public class ReflectTest3 { public static void main ...

  7. java .class 实例对象_Java产生Class类的三种实例化对象的方法

    Java产生Class类的三种实例化对象的方法 1.object.getClass 2.类名.class直接根据某个具体的类来取得Class实例化对象 3.Class.forName(String c ...

  8. SpringBoot 三种拦截http请求方式Filter,interceptor和aop

    SpringBoot 三种拦截http请求方式Filter,interceptor和aop. 这三种拦截方式的拦截顺序是:filter->Interceptor-->ControllerA ...

  9. zynq学习03 zynq中三种实现GPIO的方式

    http://m.blog.csdn.net/article/details?id=52123465 http://blog.chinaaet.com/songhuangong/p/43084 本文介 ...

最新文章

  1. 如何提高模型性能?这四大方法值得尝试 | CSDN 博文精选
  2. 求行指针所指的字符串数组中长度最长的字符串所在的行下标
  3. JAVA并发编程8_线程池的使用
  4. python怎么用matplotlib_Python-如何在matplotlib中更新图?
  5. 学习使用RIA Framework Flex创建MySQL管理UI(初学Flex实例教程)
  6. 单片机四位数加减计算机程序,51单片机简易计算器程序 实现数字的加减乘除运算...
  7. 寄存器是中央处理器内的组成部分
  8. linux网卡pci信息,在进行CGKlinux系统网络配置时,使用()命令可以查询出网卡的PCI编号与设备名的对应关系。...
  9. 2.04 对字母数字的混合排序
  10. Hive里的分区、分桶、视图和索引再谈
  11. 如何让 ABAP 报表在后台作业的模式下运行
  12. GitHub代理设置
  13. 深入Android系统(一)Build系统
  14. Supervised Contrastive Learning 论文学习
  15. 适合高中生的计算机相关知识,高中生学习计算机知识的方向浅议.doc
  16. Xposed FrameWork v89 安装
  17. 华为电脑怎么把虚拟化打开_电脑怎么在bios开启虚拟化?
  18. 磁盘阵列 vga_什么是VGA(视频图形阵列)?
  19. 客户端解析html5,基于HTML5的WebGIS实时客户端设计
  20. 王者荣耀盒子 英雄图片爬取

热门文章

  1. 华为鸿蒙理性,华为的理性,鸿蒙的节奏
  2. 关于FPGA核心bug解决
  3. (139)FPGA面试题-FPGA设计中的速度和面积互换原则
  4. (43)VHDL实现译码器与解码器
  5. 使用NRF2401 STM32F303ZET6 NUCLEO 开发板
  6. Windows核心编程条件变量
  7. python数据分析df_Python数据分析pandas入门!(附数据分析资料)
  8. vc 时间字符串转时间戳_Instant(时间戳)
  9. allegro导出坐标文件正反面_Orcad与Allegro交互
  10. Cortex-M3的存储器系统