Spring学习--实现 FactoryBean 接口在 Spring IOC 容器中配置 Bean
Spring 中有两种类型的 bean , 一种是普通的 bean , 另一种是工厂 bean , 即 FactroyBean。
工厂 bean 跟普通 bean 不同 , 其返回的对象不是指定类的一个实例 , 其返回的是该工厂 bean 的 getObject 方法所返回的对象。
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> 5 6 <bean id="car" class="com.itdjx.spring.factorybeans.CarFactoryBean"> 7 <property name="name" value="BMW"/> 8 </bean> 9 10 </beans>
1 package com.itdjx.spring.factorybeans; 2 3 /** 4 * @author Wáng Chéng Dá 5 * @create 2017-03-03 8:08 6 */ 7 public class Car { 8 9 private String name; 10 11 private int price; 12 13 public int getPrice() { 14 return price; 15 } 16 17 public void setPrice(int price) { 18 this.price = price; 19 } 20 21 public String getName() { 22 return name; 23 } 24 25 public void setName(String name) { 26 this.name = name; 27 } 28 29 public Car(String name, int price) { 30 this.name = name; 31 this.price = price; 32 } 33 34 @Override 35 public String toString() { 36 return "Car{" + 37 "name='" + name + '\'' + 38 ", price=" + price + 39 '}'; 40 } 41 }
1 package com.itdjx.spring.factorybeans; 2 3 import org.springframework.beans.factory.FactoryBean; 4 5 /** 6 * @author Wáng Chéng Dá 7 * @create 2017-03-03 8:10 8 */ 9 public class CarFactoryBean implements FactoryBean { 10 11 private String name; 12 13 public void setName(String name) { 14 this.name = name; 15 } 16 17 @Override //factoryBean 返回的实例 18 public Object getObject() throws Exception { 19 System.out.println("I am CarFactoryBean's getObject method..."); 20 return new Car(name, 500000); 21 } 22 23 @Override //factoryBean 返回的类型 24 public Class<?> getObjectType() { 25 System.out.println("I am CarFactoryBean's getObjectType method..."); 26 return Car.class; 27 } 28 29 @Override //返回的实例是否为单例 30 public boolean isSingleton() { 31 System.out.println("I am CarFactoryBean's isSingleton method..."); 32 return true; 33 } 34 }
1 package com.itdjx.spring.factorybeans; 2 3 import org.springframework.context.ApplicationContext; 4 import org.springframework.context.support.ClassPathXmlApplicationContext; 5 6 /** 7 * @author Wáng Chéng Dá 8 * @create 2017-03-03 8:14 9 */ 10 public class Main { 11 12 public static void main(String[] args) { 13 14 ApplicationContext cxt = new ClassPathXmlApplicationContext("factory-beans.xml"); 15 Car car = (Car) cxt.getBean("car"); 16 System.out.println(car); 17 18 } 19 }
控制台输出:
I am CarFactoryBean's isSingleton method... |
创建 IOC 容器时调用 isSingleton 若是返回 true 调用 getObjectType , 若返回 false , IOC 直接创建完成。
创建 Car 实例时调用 isSingleton -->> getObject , 实例创建完成。
转载于:https://www.cnblogs.com/goodcheap/p/6494105.html
Spring学习--实现 FactoryBean 接口在 Spring IOC 容器中配置 Bean相关推荐
- 【小家Spring】Spring注解驱动开发---向Spring Ioc容器中注册Bean的7种方式
每篇一句 比你有钱的人一定会比你努力,而比你努力的人终有一天会比你有钱 前言 Spring是一个非常强大的反转控制(IOC)框架,以帮助分离项目组件之间的依赖关系.因此可以说Spring容器对Bean ...
- Spring 学习笔记 3. 尚硅谷_佟刚_Spring_配置 Bean
1,bean 的配置 <bean id="helloWorld" class="com.yfy.HelloWorld"><property n ...
- java 从一个容器获取对象,如何从 Spring IoC 容器中获取对象?
前面几篇文章主要分析了 Spring IoC 容器如何初始化,以及解析和注册我们定义的 bean 信息. 其中,「Spring 中的 IoC 容器」对 Spring 中的容器做了一个概述,「Sprin ...
- Spring注解驱动开发第7讲——如何按照条件向Spring容器中注册bean?这次我懂了!!
写在前面 当bean是单实例,并且没有设置懒加载时,Spring容器启动时,就会实例化bean,并将bean注册到IOC容器中,以后每次从IOC容器中获取bean时,直接返回IOC容器中的bean,而 ...
- 六、spring之通过FactoryBean为ioc容器中添加组件
前面我们已经介绍了几种为容器中添加组件的方法,今天一起学习通过FactoryBean添加组件的方法. 首先我们准备一个类,也就是我们需要注册进spring的ioc容器中的类 类Color: // 不必 ...
- Spring学习总结(一)——Spring实现IoC的多种方式
一.Spring框架概述 Spring是一个开源免费的框架,为了解决企业应用开发的复杂性而创建.Spring框架是一个轻量级的解决方案,可以一站式地构建企业级应用.Spring是模块化的,所以可以只使 ...
- Spring学习手札(三)理解IoC 拯救不开心
Inverse of Control,翻译成"控制反转",是Spring的核心.IoC不是一种技术,而是一种设计思想.就是将原本在程序中手动创建对象的控制权(new Object( ...
- Spring学习第3篇:Spring容器的基本使用
大家家好,我是一名网络怪咖,北漂五年.相信大家和我一样,都有一个大厂梦,作为一名资深Java选手,深知Spring重要性,现在普遍都使用SpringBoot来开发,面试的时候SpringBoot原理也 ...
- Spring注解驱动开发第11讲——面试官让我说说:如何使用FactoryBean向Spring容器中注册bean?
写在前面 经过前面的学习,我们知道可以通过多种方式向Spring容器中注册bean.可以使用@Configuration注解结合@Bean注解向Spring容器中注册bean:可以按照条件向Sprin ...
最新文章
- 第二周 数据分析之展示 Matplotlib库入门
- 要不来重新认识Spring事务?三歪又学到了
- 守列划分问题(圆排列+排列dp+结论)
- ubuntu-14.04.2-desktop使用方法
- 带你掌握不同平台下,探索JDK源码所需的native方法
- 卓有成效的管理者——彼得·德鲁克
- c语言中文件指针概念,C语言文件的概念和文件指针
- 【那些年我们用过的Redis】还记得大明湖畔那些Redis数据吗?
- 【​观察】做好数据到介质的连接者 新数据时代浪潮存储的行与思
- [落选]2021微信大数据挑战赛_总结
- oracle试算平衡表查询,试算平衡表
- 如何将m4a格式音频转为mp3?
- excel计算两列差的公式和方法
- 腾讯的分布式国产数据库Tbase,每天支撑 10 亿笔交易
- C语言随机刷新,C语言 刷新缓冲区
- “清华女神”回国,赤子之心,如愿以偿
- C++ Primer Plus (第六版)编程练习记录(chapter8 函数探幽)
- java c 速度_Java和C#运行速度对比:Java比C#快约3倍
- 第十二届“挑战杯”QG学子载誉归来,荣获全国决赛“一等奖”
- Java调用linux终端命令