普通bean和工厂bean

  • 普通bean
  • 工厂bean(FactoryBean)

Spring中有两种类型bean,一种是普通bean,另外一种是工厂bean(FactoryBean)。
区别:

不同点
普通bean 在配置文件中定义bean的类型就是返回类型。
工厂bean 在配置文件定义bean类型可以和返回类型不同。

普通bean

在配置文件中定义bean的类型就是返回类型。

Book类:

package com.Keafmd.spring5.collectiontype;import java.util.List;/*** Keafmd** @ClassName: Book* @Description:* @author: 牛哄哄的柯南* @date: 2021-01-15 14:56*/
public class Book {private List<String> list;public void setList(List<String> list) {this.list = list;}public void test(){System.out.println(list);}
}

bean2.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: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"><!--配置文件中定义的类型是 Book--><bean id="book" class="com.Keafmd.spring5.collectiontype.Book" ></bean></beans>

测试代码:

package com.Keafmd.spring5.testdemo;import com.Keafmd.spring5.collectiontype.Book;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;/*** Keafmd** @ClassName: TestSpring5demo1* @Description: 测试类* @author: 牛哄哄的柯南* @date: 2021-01-15 14:30*/
public class TestSpring5demo1 {@Testpublic void test2(){ApplicationContext context = new ClassPathXmlApplicationContext("bean2.xml");Book book = context.getBean("book",Book.class);Book book2 = context.getBean("book",Book.class);System.out.println(book);}}

输出结果:

com.Keafmd.spring5.collectiontype.Book@376b4233Process finished with exit code 0

我们可以看到输出结果中的Book@376b4233,我们的配置文件中定义的是Book类型,返回的就是Book类型,这就是我们经常见的普通bean。

工厂bean(FactoryBean)

在配置文件定义bean类型可以和返回类型不同。

创建步骤:
第一步:创建类MyBean(命名随意),让这个类作为工厂bean,实现接口FactoryBean。
第二步:实现接口里面的方法,在实现的方法中定义返回的bean类型。

MyBean类:

package com.Keafmd.spring5.factorybean;import com.Keafmd.spring5.collectiontype.Course;
import org.springframework.beans.factory.FactoryBean;/*** Keafmd** @ClassName: MyBean* @Description: 工厂Bean* @author: 牛哄哄的柯南* @date: 2021-01-15 15:38*/
public class MyBean implements FactoryBean<Course> {//定义返回的bean的对象@Overridepublic Course getObject() throws Exception {Course course = new Course();course.setCname("abc");return course;}@Overridepublic Class<?> getObjectType() {return null;}@Overridepublic boolean isSingleton() {return false;}
}

Course类:

package com.Keafmd.spring5.collectiontype;/*** Keafmd** @ClassName: Course* @Description: 课程类* @author: 牛哄哄的柯南* @date: 2021-01-15 14:41*/
public class Course {private String cname; // 课程名称public void setCname(String cname) {this.cname = cname;}@Overridepublic String toString() {return "Course{" +"cname='" + cname + '\'' +'}';}
}

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"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!--配置文件中定义的类型是 MyBean--><bean id="mybean" class="com.Keafmd.spring5.factorybean.MyBean"></bean></beans>

测试类:

package com.Keafmd.spring5.testdemo;import com.Keafmd.spring5.bean.Orders;
import com.Keafmd.spring5.collectiontype.Book;
import com.Keafmd.spring5.collectiontype.Course;
import com.Keafmd.spring5.collectiontype.Stu;
import com.Keafmd.spring5.factorybean.MyBean;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;/*** Keafmd** @ClassName: TestSpring5demo1* @Description: 测试类* @author: 牛哄哄的柯南* @date: 2021-01-15 14:30*/
public class TestSpring5demo1 {@Testpublic void test3(){ApplicationContext context = new ClassPathXmlApplicationContext("bean3.xml");Course myBean = context.getBean("mybean",Course.class);System.out.println(myBean);}}

输出结果:

Course{cname='abc'}Process finished with exit code 0

很明显的可以看出,配置文件中定义的类型是MyBean,返回的类型是Course。

看完如果对你有帮助,感谢点赞支持!
如果你是电脑端的话,看到右下角的 “一键三连” 了吗,没错点它[哈哈]


加油!

共同努力!

Keafmd

Spring中的普通bean和工厂bean相关推荐

  1. 惊呆了,Spring中竟然有12种定义bean的方法

    前言 在庞大的 Java 技术体系中,Spring 有着举足轻重的地位,它给每位开发者带来了极大的便利和惊喜. 我们都知道 Spring 是创建和管理bean的工厂,它提供了多种方式定义 bean,能 ...

  2. spring学习--bean--普通bean与工厂bean(FactoryBean)区别

    转载:https://blog.csdn.net/weixin_45496190/article/details/107067200 1.Spring 有两种类型 bean,一种普通 bean,另外一 ...

  3. 四、Spring中使用@Conditional按照条件注册Bean

    以前其实是写过@Condtional注解的笔记的,这里附上链接: Spring中的@conditional注解 但已经忘记的差不多了,所以今天再重新学习下,可以互补着学习 @Contional:按照一 ...

  4. Spring中如何使用注解来配置Bean?有哪些相关的注解?

    首先需要在Spring配置文件中增加如下配置: <context:component-scan base-package="org.example"/> 然后可以用@C ...

  5. java spring源码_spring源码分析-spring中的bean

    接触过spring的人都知道,在spring中我们称java对象为bean,我们在spring的debug日志或者报错日志也能看到各种bean的描述.其实,spring的bean和java的对象之间是 ...

  6. 详解设计模式在Spring中的应用

    设计模式作为工作学习中的枕边书,却时常处于勤说不用的尴尬境地,也不是我们时常忘记,只是一直没有记忆. 今天,螃蟹在IT学习者网站就设计模式的内在价值做一番探讨,并以spring为例进行讲解,只有领略了 ...

  7. MyBatis 和 Spring 中的 23 种设计模式,真香,拿去用吧!

    学习源码框架,为什么要从Mybatis框架入手?在 MyBatis 3.5.1 这个版中有 968 个类. 2770 个字段. 8422个方法. 42504 行代码. 186428个指令码.其源码体量 ...

  8. 9种设计模式在Spring中的运用,一定要非常熟练!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:iCoding91 https://blog.csdn.ne ...

  9. 这些Spring中的设计模式,你都知道吗?

    来自: itxxz.com/a/javashili/tuozhan/2014/0601/7.html 设计模式作为工作学习中的枕边书,却时常处于勤说不用的尴尬境地,也不是我们时常忘记,只是一直没有记忆 ...

最新文章

  1. rtorrent - 强大的命令行BT客户端
  2. php csv 简单的导入
  3. 【深度学习】何恺明经典之作—2009 CVPR Best Paper | Dark Channel Prior
  4. POJ 2483 Cows(树状数组)
  5. 固定定位及布局知识总结
  6. 如何使用Angular FormBuilder
  7. let与expr命令的用法与实战案例
  8. 前端学习(479):html简介
  9. 斐波那契回调线怎么画_外汇MT4平台上的斐波那契回调线怎么使用
  10. 便利店小程序需要服务器吗,便利店开发小程序的功能
  11. TLS(Thread Local Storage)问题demo
  12. WPS最大的败笔是“免费用,广告弹窗”,难怪用户纷纷使用office
  13. ppt生成器_#PPT素材神器#在线卡通头像生成器: avataaars generator
  14. android设置view透明度渐变,android中 怎么实现一张图片从左到右透明度改变渐变消失的动画效果 Android 动态渐变 泽.. - 贪吃蛇学院-专业IT技术平台...
  15. python批量查询ip归属地_IP地址地理信息批量查询小工具
  16. 高数_第1章空间解析几何与向量代数__直线方程
  17. cad隐藏图层命令快捷键_CAD关闭图层快捷键,隐藏显示的CAD图层
  18. 极飞亮相世界无人机大会,创始人彭斌讲述农业无人机的未来
  19. 如何在Mac上设置iCloud
  20. 硬盘装机后,删除开机启动项

热门文章

  1. RIP协议介绍及配置
  2. Maven简明教程(4)---依赖关系(理论篇)
  3. SQL Server启动出现“指定的服务未安装”的解决方法
  4. GMQ Wallet 跨时代产品,全面体现区块链数字资产价值
  5. xml文件的生成和下载
  6. 使用freemarker模板生成带图片的word--xml格式
  7. C++基础编程题(06)求调和平均数(两个数,的倒数平均值的倒数)
  8. LeetCode--分发饼干(贪心)
  9. Java基础之多线程的创建方式以及命名
  10. 一文读懂原型链 prototype和__proto__详解