目录

IOC操作Bean管理XML方式(FactoryBean)

Spring 有两种类型的bean

第一种:是普通的 bean

第二种:工厂bean FactoryBean

第一步:创建类,让这个类作为工厂bean

第二步:在类中实现接口里面的方法,在实现的方法中定义返回的 bean 类型

第三步:测试

总结:


IOC操作Bean管理XML方式(FactoryBean)

Spring 有两种类型的bean

第一种:是普通的 bean

普通的 bean:在xml配置文件中的class配置的是什么类,那么返回的就必须是哪个类

也就是说:在配置文件中定义 bean 类型就是返回类型

演示效果:

第二种:工厂bean FactoryBean

工厂bean:在xml配置文件中的class配置的是什么类,返回的类可以和class配置的类不一样

也就是说:在配置文件定义 bean 类型可以和返回类型不一样

演示:

第一步:创建类,让这个类作为工厂bean

问:如何让类作为工厂 Bean 呢?

方法:实现接口 FactoryBean

为了方便测试,我们先创建一个 factorybean 包

再在 factorybean 包中新建一个 Mybean 类

Mybean类中的代码如下:

package com.lbj.spring5.factorybean;import com.lbj.spring5.collectiontype.Course;
import org.springframework.beans.factory.FactoryBean;public class Mybean {}

新建一个bean3.xml配置文件用来测试

代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"xmlns:util="http://www.springframework.org/schema/util"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
<!--Mybean对象通过配置文件创建出来--><bean id="myBean" class="com.lbj.spring5.factorybean.Mybean"></bean>
</beans>

第二步:在类中实现接口里面的方法,在实现的方法中定义返回的 bean 类型

package com.lbj.spring5.factorybean;import com.lbj.spring5.collectiontype.Course;
import org.springframework.beans.factory.FactoryBean;/***  工厂模式这里指的是这个实例工厂已经替我们创建好,直接拿着用就行*/
public class Mybean implements FactoryBean<Course>{@Override
//    定义返回bean的实例
//    这么做的目的是设置Mybean这个部分返回的对象是Course对象而不是Mybeanpublic Course getObject() throws Exception {Course course = new Course();course.setCname("语文课");return course;}@Override
//    返回bean的类型public Class<?> getObjectType() {return null;}@Override
//    是否单例public boolean isSingleton() {return false;}
}

第三步:测试

package com.lbj.spring5.testdemo;import com.lbj.spring5.collectiontype.Course;
import com.lbj.spring5.factorybean.Mybean;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class TestSpring5Demo1 {@Testpublic void tsetCollection3(){ApplicationContext context=new ClassPathXmlApplicationContext("bean3.xml");Course course=context.getBean("myBean", Course.class);System.out.println(course);}
}

总结:

工厂bean,就是为了后面返回不同类型对象作个铺垫

工厂模式的意义就是为了不暴露对象创建的过程

泛型工厂模式

IOC操作Bean管理XML方式(FactoryBean)相关推荐

  1. IOC操作Bean管理XML方式(xml自动装配)

    目录 IOC操作Bean管理XML方式(xml自动装配) 一.演示自动装配过程 (1)根据 属性名称 装配 步骤一: 步骤二: 步骤三: (2)根据 属性类型 装配 (2.1)根据 类型 自动装配产生 ...

  2. IOC操作Bean管理XML方式(bean 的生命周期)

    目录 IOC操作Bean管理XML方式(bean 的生命周期) 1.bean 的生命周期(在单例模式下的生命周期) (1)通过构造器创建 bean 的实例(执行类中无参构造方法去创建对象) (2)为 ...

  3. IOC操作Bean管理XML方式(外部属性文件)

    目录 IOC操作Bean管理XML方式(外部属性文件) 前情引入: 实验演示: 1.直接配置数据库信息 (1)配置德鲁伊连接池 (2)引入德鲁伊连接池jar包 (3)创建一个bean6.xml配置文件 ...

  4. IOC操作Bean管理XML方式(bean的作用域)

    目录 IOC操作Bean管理XML方式(bean的作用域) 1.在Spring 里面,设置创建 bean 实例是单实例还是多实例的方式 (1)在Spring 配置文件bean 标签里面有属性(scop ...

  5. IOC操作Bean管理XML方式(注入集合类型属性)

    目录 IOC操作Bean管理XML方式(注入集合类型属性) (1)首先进行环境的搭建和准备 (2)创建一个类:用来完成集合类型属性注入 (3)在Spring 配置文件进行配置 (4)编写一个测试类进行 ...

  6. IOC操作Bean管理XML方式(注入空值和特殊符号)

    IOC操作Bean管理XML方式(注入空值和特殊符号) 目录 IOC操作Bean管理XML方式(注入空值和特殊符号) (1)通过null标签注入空值: 标签注入空值 (2)属性值中包含特殊符号: 方法 ...

  7. IOC操作Bean管理XML方式(有参构造注入属性)

    IOC操作Bean管理XML方式 目录 有参构造注入属性 (1)步骤(创建类,定义属性,创建属性对应的有参构造方法): (2)步骤:在Spring 的xml配置文件中进行配置 (3)步骤:进行测试 结 ...

  8. IOC操作Bean管理XML方式(创建对象和set注入属性)

    目录 1.什么是 Bean 管理: (1)通过 Spring 创建对象 (2)通过 Spring 注入属性 2.IOC 操作 Bean 管理有两种方式: (1)基于 xml 配置文件方式实现 (1.1 ...

  9. IOC操作Bean管理XML方式(P名称空间注入)

    P名称空间注入(用的不多,但是也是一种方式) 目录 P名称空间注入(用的不多,但是也是一种方式) (1)使用P名称空间注入,可以简化基于xml 配置方式 第一步:添加p 名称空间在配置文件中(和上面的 ...

最新文章

  1. vs配色方案_提高生产力:配色,模板参数过滤及IntelliCode
  2. fork()会拷贝子线程吗?
  3. 前Oracle首席工程师怒喷:MySQL 是“超烂的数据库”,建议考虑 PostgreSQL
  4. Python函数式编程——map()、reduce()
  5. mysql触发器好用吗_为什么大家都不推荐使用MySQL触发器而用存储过程?
  6. LocalDB 静默安装
  7. 2014\Province_C_C++_B\6 奇怪的分式
  8. docker开放的端口_关于docker自动开放端口解决方案
  9. 教授直言:学术界存在内卷化,而且非常严重;不改变量化式的管理模式,内卷化就不会消失...
  10. 汇编语言:实现大小写字母转换
  11. c语言中空格算空行吗,1、程序中空格与空行使用规范
  12. 反向微分运放电路波形_做到这三步,轻松实现运放电路稳定性
  13. python时间戳转为datetime格式_python 时间 时间戳 转换
  14. 隐秘?混乱?商业化?记者深入总部,探寻OpenAI“拯救世界”背后的真相
  15. 解决手机QQ发送文件给电脑端,电脑端无法接收的问题
  16. java 求矩阵的伴随矩阵_求矩阵伴随矩阵的java实现
  17. 【个人网站】零基础个人网站搭建完整教程(附免费源码)
  18. MySQL 中 declare 声明的局部变量和 @var 会话变量的使用介绍
  19. CSDN数据库泄露!那些网站够安全吗?
  20. 激光器长导通时间的驱动电路

热门文章

  1. 近指针, 远指针和巨指针
  2. Receiver type ‘X’ for instance message is a forward declaration
  3. cocos2dx 父元素影响子元素
  4. 机器学习实战学习笔记 一 k-近邻算法
  5. 4.2-户部告急-百姓们太太太太太能生了2333
  6. 无类别地址CIDR概述
  7. 对公平席位分配问题的探讨:最大余数法、Q值法和D’Hondt方法及其特例|公平分配原则等
  8. Leetcode--2. 两数相加
  9. 终端服务器安全层在协议流中检测到错误,终端服务器安全层在协议流中检测到错误,并已取消客户端连接...
  10. iphone最新款手机_iPhone 丢了99.9%能找回?这种做法不可信!!