Bean的三种实例化方式
在面向对象程序中,如要使用某个对象,就需要先实例化这个对象。同样的,在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的三种实例化方式的更多相关文章
- Java开发学习(四)----bean的三种实例化方式
一.环境准备 准备开发环境 创建一个Maven项目 pom.xml添加依赖 resources下添加spring的配置文件applicationContext.xml 最终项目的结构如下: 二. ...
- Spring bean的bean的三种实例化方式
Bean 定义 被称作 bean 的对象是构成应用程序的支柱也是由 Spring IoC 容器管理的.bean 是一个被实例化,组装,并通过 Spring IoC 容器所管理的对象.这些 bean ...
- spring Bean的三种配置方式
Spring Bean有三种配置方式: 传统的XML配置方式 基于注解的配置 基于类的Java Config 添加spring的maven repository <dependency> ...
- Spring三 Bean的三种创建方式
创建Bean的三种方式在大多数情况下,Spring容器直接通过new关键字调用构造器来创建Bean实例,而class属性指定Bean实例的实现类,但这不是实例化Bean的唯一方法.实际上,Spring ...
- Spring第一课:基于XML装配bean(四),三种实例化方式:默认构造、静态工厂、实例工厂
Spring中基于XML中的装配bean有三种方式: 1.默认构造 2.静态工厂 3.实例工厂 1.默认构造 在我们在Spring的xml文件中直接通过: <bean id=" ...
- spring Bean的三种注入方式
1.构造函数注入: 构造函数的注入方式分为很多种 (1)普通构造函数,空参数的构造函数 <bean id="exampleBean" class="examples ...
- Spring管理Bean的三种创建方式
1.使用类构造器实例化 (90%以上都是使用这种) <bean id=“orderService" class="cn.itcast.OrderServiceBean&qu ...
- spring bean的三种管理方式·
1.无参构造函数 1.xml文件配置内容 <!--无参构造函数--> <bean id="bean1" class="com.imooc.ioc.dem ...
- spring三种实例化bean的方式
1构造函数实例化 2静态工厂方法实例化 3实例工厂方法实例化 service接口: package service; public interface PersonService { public v ...
随机推荐
- [线性代数] 线性代数入门A Gentle Introduction
An Overview: System of Linear Equations Basically, linear algebra solves system of linear equations ...
- 小程序can't read property 'push' of undefined
在某些情况下是因为没有初始化,所以初始化一下就好了
- 高效使用Linux快捷键
命令行操作快捷键 Ctrl+a跳到本行的行首,Ctrl+e则跳到页尾. Ctrl+u删除当前光标前面的所有文字, ctrl+k-删除当前光标后面的所有文字 Ctrl+w删除光标前的单词 Backsap ...
- 机器学习系列算法1:KNN
思路:空间上距离相近的点具有相似的特征属性. 执行流程: •1. 从训练集合中获取K个离待预测样本距离最近的样本数据; •2. 根据获取得到的K个样本数据来预测当前待预测样本的目标属性值 三要素:K值 ...
- Redis学习(一) —— 基本使用与原理
一.数据结构 string Redis字符串是可修改字符串,在内存中以字节数组形式存在. 下面是string在源码中的定义,SDS(Simple Dynamic String) struct SDS& ...
- chrome-添加JSON-handler插件
1.访问http://jsonhandle.sinaapp.com/下载 2.谷歌访问 chrome://extensions/ 然后找到你下载的JSON-handle_0.5.2.crx文件,直 ...
- 纯CSS画三角形(带边框)
实例一: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...
- JMeter-因cookie管理器不兼容返回H5内容内容的解决
问题: 使用的post方法但是显示的是get,并且返回页面H5的内容 解决: jmeter版本太低了,需要选择cookie管理期选择兼容模式(一般默认的为standard)
- Flume-Hbase-Sink针对不同版本flume与HBase的适配研究与经验总结
https://cloud.tencent.com/developer/article/1025430 Flume-Hbase-Sink针对不同版本flume与HBase的适配研究与经验总结 mike ...
- 39 Flutter仿京东商城项目 收货地址列表、增加 修改收货地址布局、弹出省市区选择器
加群452892873 下载对应39课文件,运行方法,建好项目,直接替换lib目录 pubspec.yaml city_pickers: ^ AddressAdd.dart import 'packa ...