在spring中有三中实例化bean的方式:

一、使用构造器实例化;(90%通常使用的一个方法)

二、使用静态工厂方法实例化;

三、使用实例化工厂方法实例化。

每种实例化所采用的配置是不一样的:

一、使用构造器实例化;

这种实例化的方式可能在我们平时的开发中用到的是最多的,因为在xml文件中配置简单并且也不需要额外的工厂类来实现。

  1. <!--applicationContext.xml配置:-->
  2. <bean id="personService" class="cn.mytest.service.impl.PersonServiceBean"></bean>

id是对象的名称,class是要实例化的类,然后再通过正常的方式进调用实例化的类即可,比如:

  1. public void instanceSpring(){
  2. //加载spring配置文件
  3. ApplicationContext ac = new ClassPathXmlApplicationContext(
  4. new String[]{
  5. "/conf/applicationContext.xml"
  6. });
  7. //调用getBean方法取得被实例化的对象。
  8. PersonServiceBean psb = (PersonServiceBean) ac.getBean("personService");
  9. psb.save();
  10. }

采用这种实例化方式要注意的是:要实例化的类中如果有构造器的话,一定要有一个无参的构造器。

二、使用静态工厂方法实例化;

根据这个中实例化方法的名称就可以知道要想通过这种方式进行实例化就要具备两个条件:(一)、要有工厂类及其工厂方法;(二)、工厂方法是静态的。OK,知道这两点就好办了,首先创建工程类及其静态方法:

  1. package cn.mytest.service.impl;
  2. /**
  3. *创建工厂类
  4. *
  5. */
  6. public class PersonServiceFactory {
  7. //创建静态方法
  8. public static PersonServiceBean createPersonServiceBean(){
  9. //返回实例化的类的对象
  10. return new PersonServiceBean();
  11. }
  12. }

然后再去配置spring配置文件,配置的方法和上面有点不同,这里也是关键所在

  1. <!--applicationContext.xml配置:-->
  2. <bean id="personService1" class="cn.mytest.service.impl.PersonServiceFactory" factory-method="createPersonServiceBean"></bean>

id是实例化的对象的名称,class是工厂类,也就实现实例化类的静态方法所属的类,factory-method是实现实例化类的静态方法。

然后按照正常的调用方法去调用即可:

  1. public void instanceSpring(){
  2. //加载spring配置文件
  3. ApplicationContext ac = new ClassPathXmlApplicationContext(
  4. new String[]{
  5. "/conf/applicationContext.xml"
  6. });
  7. //调用getBean方法取得被实例化的对象。
  8. PersonServiceBean psb = (PersonServiceBean) ac.getBean("personService1");
  9. psb.save();
  10. }

三、使用实例化工厂方法实例化。

这个方法和上面的方法不同之处在与使用该实例化方式工厂方法不需要是静态的,但是在spring的配置文件中需要配置更多的内容,,首先创建工厂类及工厂方法:

  1. package cn.mytest.service.impl;
  2. /**
  3. *创建工厂类
  4. *
  5. */
  6. public class PersonServiceFactory {
  7. //创建静态方法
  8. public PersonServiceBean createPersonServiceBean1(){
  9. //返回实例化的类的对象
  10. return new PersonServiceBean();
  11. }
  12. }

然后再去配置spring配置文件,配置的方法和上面有点不同,这里也是关键所在

  1. <!--applicationContext.xml配置:-->
  2. <bean id="personServiceFactory" class="cn.mytest.service.impl.PersonServiceFactory"></bean>
  3. <bean id="personService2" factory-bean="personServiceFactory" factory-method="createPersonServiceBean1"></bean>

这里需要配置两个bean,第一个bean使用的构造器方法实例化工厂类,第二个bean中的id是实例化对象的名称,factory-bean对应的被实例化的工厂类的对象名称,也就是第一个bean的id,factory-method是非静态工厂方法。

然后按照正常的调用方法去调用即可:

  1. public void instanceSpring(){
  2. //加载spring配置文件
  3. ApplicationContext ac = new ClassPathXmlApplicationContext(
  4. new String[]{
  5. "/conf/applicationContext.xml"
  6. });
  7. //调用getBean方法取得被实例化的对象。
  8. PersonServiceBean psb = (PersonServiceBean) ac.getBean("personService2");
  9. psb.save();
  10. }

三种实例化bean的方式的更多相关文章

  1. (转)Spring的三种实例化Bean的方式

    http://blog.csdn.net/yerenyuan_pku/article/details/52832793 Spring提供了三种实例化Bean的方式. 使用类构造器实例化. <be ...

  2. spring三种实例化bean的方式

    1构造函数实例化 2静态工厂方法实例化 3实例工厂方法实例化 service接口: package service; public interface PersonService { public v ...

  3. Spring第四弹—–Spring的三种实例化bean的方式

    1.使用类构造器实例化   1 <bean id=“orderService" class="cn.itcast.OrderServiceBean"/> 2. ...

  4. Spring中四种实例化bean的方式

    本文主要介绍四种实例化bean的方式(注入方式) 或者叫依赖对象实例化的四种方式.上面的程序,创建bean 对象,用的是什么方法 ,用的是构造函数的方式 (Spring 可以在构造函数私有化的情况下把 ...

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

    Spring中三种配置Bean的方式分别是: 基于XML的配置方式 基于注解的配置方式 基于Java类的配置方式 一.基于XML的配置 这个很简单,所以如何使用就略掉. 二.基于注解的配置 Sprin ...

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

    1.实例化bean的三种方法:(1) 构造器<!-- 体验1 --><bean id="personService" class="com.persia ...

  7. Spring入门学习(二)三种实例化bean的方法

    前面的哪一种就是通过构造函数来实例化对象 下面我们可能用到工厂方法来视力话对象,这样我们的配置文件又该怎么配置呢 <bean name="service2" class=&q ...

  8. 三种定义bean的方式

    方法一:基于XML的bean定义(需要提供setter方法) 1.首先编写student.java和teacher.java两个类 Student.java: public class Student ...

  9. 三种实例化委托的方式(C# 编程指南)

    1.定义的委托和方法 delegate void TestDelegate(string s); static void M(string s) { Console.WriteLine(s); } 2 ...

随机推荐

  1. discuz x2 diy 模块的样式点击不管用,模块的数据、标题都可以编辑

    这个是diy模板的文件忘记添加   <style id="diy_style" type="text/css"></style>   一 ...

  2. awk 手册--【转载】

    1. 前言 有关本手册 : 这是一本awk学习指引,  其重点着重于 : l         awk 适于解决哪些问题 ? l         awk 常见的解题模式为何 ? 为使读者快速掌握awk解 ...

  3. quick-cocos2d-x 接入支付宝(android)(转,待验证)

    quick-cocos2d-x 实现在lua里面完成android支付宝的接入 一.支付宝注册是很麻烦的一个过程,本文就不解释了,想了解的去官网看下注册流程.然后下载他们的sdk-WS_SECURE_ ...

  4. eclipse+maven 无法编译

    Archive for required library: 'F:/mavenLib/org/mybatis/mybatis/3.4.1/mybatis-3.4.1.jar' in project ' ...

  5. 【转】MYSQL入门学习之一:基本操作

    转载地址:http://www.2cto.com/database/201212/173868.html 1.登录数据库    www.2cto.com       命令:mysql -u usern ...

  6. phpcms 03

    继续上次对header.html文件的分析 logo<a href="{siteurl($siteid)}/"><img src="{IMG_PATH} ...

  7. hdu 3037 Saving Beans

    Saving Beans Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tota ...

  8. 华东交通大学2016年ACM“双基”程序设计竞赛 1010

    Problem Description LB是个十分喜欢钻研的人,对什么事都要搞明白.有一天他学习到了阶乘,他十分喜欢,所以他在想一个问题.如果给定一个数n,求n!能不能被2016整除.LB算了好久都 ...

  9. 2016年11月29日 星期二 --出埃及记 Exodus 20:20

    2016年11月29日 星期二 --出埃及记 Exodus 20:20 Moses said to the people, "Do not be afraid. God has come t ...

  10. 苹果Xcode帮助文档阅读指南

    文档导读 https://developer.apple.com/legacy/library/navigation/ 前面我们讲Xcode的文档结构是在介绍如何能够快速定位到你要找的内容.但是很多人 ...