在面向对象程序中,如要使用某个对象,就需要先实例化这个对象。同样的,在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整合过的工厂类,我们一般都是自己用代码来管理的。

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

  1. Java开发学习(四)----bean的三种实例化方式

    一.环境准备 准备开发环境 创建一个Maven项目 pom.xml添加依赖 resources下添加spring的配置文件applicationContext.xml 最终项目的结构如下:    二. ...

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

     Bean 定义 被称作 bean 的对象是构成应用程序的支柱也是由 Spring IoC 容器管理的.bean 是一个被实例化,组装,并通过 Spring IoC 容器所管理的对象.这些 bean ...

  3. spring Bean的三种配置方式

    Spring Bean有三种配置方式: 传统的XML配置方式 基于注解的配置 基于类的Java Config 添加spring的maven repository <dependency> ...

  4. Spring三 Bean的三种创建方式

    创建Bean的三种方式在大多数情况下,Spring容器直接通过new关键字调用构造器来创建Bean实例,而class属性指定Bean实例的实现类,但这不是实例化Bean的唯一方法.实际上,Spring ...

  5. Spring第一课:基于XML装配bean(四),三种实例化方式:默认构造、静态工厂、实例工厂

    Spring中基于XML中的装配bean有三种方式: 1.默认构造 2.静态工厂 3.实例工厂 1.默认构造 在我们在Spring的xml文件中直接通过:     <bean id=" ...

  6. spring Bean的三种注入方式

    1.构造函数注入: 构造函数的注入方式分为很多种 (1)普通构造函数,空参数的构造函数 <bean id="exampleBean" class="examples ...

  7. Spring管理Bean的三种创建方式

    1.使用类构造器实例化  (90%以上都是使用这种) <bean id=“orderService" class="cn.itcast.OrderServiceBean&qu ...

  8. spring bean的三种管理方式·

    1.无参构造函数 1.xml文件配置内容 <!--无参构造函数--> <bean id="bean1" class="com.imooc.ioc.dem ...

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

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

随机推荐

  1. java大型互联网项目大流量高并发所需的技术

    互联网一般运行技术:webservice,jquery,访问量,缓存,数据安全等,JAVA后台就比较多了,不过,像这种大型的互联网项目,基本框架都有了,你需要做的就是熟悉业务,熟悉他们公司所用的框架, ...

  2. 在CentOS7中安装zookeeper

    参考:https://www.linuxidc.com/Linux/2016-09/135052.htm 1.zookeeper运行需要jdk环境,先确保有配置jdk,可以参考此处 2.下载解压zoo ...

  3. oracle查询表指定字段类型

    查询表某字段类型,如下: SELECT data_type FROM all_tab_cols WHERE table_name = UPPER('SRIS_P_BaseInfo') and colu ...

  4. IO之Socket网络编程

    一.Socket Socket不是Java中独有的概念,而是一个语言无关标准.任何可以实现网络编程的编程语言都有Socket. 1,Socket概念 网络上的两个程序通过一个双向的通信连接实现数据的交 ...

  5. Python 中的 -> 是什么意思

    函数标注通常用于 类型提示:例如以下函数预期接受两个 int 参数并预期返回一个 int 值:```def sum_two_numbers(a: int, b: int) -> int:retu ...

  6. Java Web接入支付宝扫码付款API(使用SDK证书配置properties )

    一.支付宝当面付功能Demo 官方文档https://docs.open.alipay.com/194/106078/ ps:因为沙箱环境一经配置了证书公钥则无法重置 第一步下载项目SKD&D ...

  7. springboot集成调用Azkaban

    springboot集成调用Azkaban 一. 说明 1.Azkaban是由Linkedin公司推出的一个批量工作流任务调度器,主要用于在一个工作流内以一个特定的顺序运行一组工作和流程,它的配置是通 ...

  8. PAT 甲级1057 Stack (30 分)(不会,树状数组+二分)*****

    1057 Stack (30 分)   Stack is one of the most fundamental data structures, which is based on the prin ...

  9. PAT 甲级 1056 Mice and Rice (25 分) (队列,读不懂题,读懂了一遍过)

    1056 Mice and Rice (25 分)   Mice and Rice is the name of a programming contest in which each program ...

  10. 取用户中文名 FDM_CUST_USER_NAME_READ_SINGLE

    DATA:lv_first TYPE ad_namefir,      lv_last  TYPE ad_namelas,      lv_full  TYPE ad_namtext.   CALL  ...