Spring中的普通bean和工厂bean
普通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相关推荐
- 惊呆了,Spring中竟然有12种定义bean的方法
前言 在庞大的 Java 技术体系中,Spring 有着举足轻重的地位,它给每位开发者带来了极大的便利和惊喜. 我们都知道 Spring 是创建和管理bean的工厂,它提供了多种方式定义 bean,能 ...
- spring学习--bean--普通bean与工厂bean(FactoryBean)区别
转载:https://blog.csdn.net/weixin_45496190/article/details/107067200 1.Spring 有两种类型 bean,一种普通 bean,另外一 ...
- 四、Spring中使用@Conditional按照条件注册Bean
以前其实是写过@Condtional注解的笔记的,这里附上链接: Spring中的@conditional注解 但已经忘记的差不多了,所以今天再重新学习下,可以互补着学习 @Contional:按照一 ...
- Spring中如何使用注解来配置Bean?有哪些相关的注解?
首先需要在Spring配置文件中增加如下配置: <context:component-scan base-package="org.example"/> 然后可以用@C ...
- java spring源码_spring源码分析-spring中的bean
接触过spring的人都知道,在spring中我们称java对象为bean,我们在spring的debug日志或者报错日志也能看到各种bean的描述.其实,spring的bean和java的对象之间是 ...
- 详解设计模式在Spring中的应用
设计模式作为工作学习中的枕边书,却时常处于勤说不用的尴尬境地,也不是我们时常忘记,只是一直没有记忆. 今天,螃蟹在IT学习者网站就设计模式的内在价值做一番探讨,并以spring为例进行讲解,只有领略了 ...
- MyBatis 和 Spring 中的 23 种设计模式,真香,拿去用吧!
学习源码框架,为什么要从Mybatis框架入手?在 MyBatis 3.5.1 这个版中有 968 个类. 2770 个字段. 8422个方法. 42504 行代码. 186428个指令码.其源码体量 ...
- 9种设计模式在Spring中的运用,一定要非常熟练!
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:iCoding91 https://blog.csdn.ne ...
- 这些Spring中的设计模式,你都知道吗?
来自: itxxz.com/a/javashili/tuozhan/2014/0601/7.html 设计模式作为工作学习中的枕边书,却时常处于勤说不用的尴尬境地,也不是我们时常忘记,只是一直没有记忆 ...
最新文章
- rtorrent - 强大的命令行BT客户端
- php csv 简单的导入
- 【深度学习】何恺明经典之作—2009 CVPR Best Paper | Dark Channel Prior
- POJ 2483 Cows(树状数组)
- 固定定位及布局知识总结
- 如何使用Angular FormBuilder
- let与expr命令的用法与实战案例
- 前端学习(479):html简介
- 斐波那契回调线怎么画_外汇MT4平台上的斐波那契回调线怎么使用
- 便利店小程序需要服务器吗,便利店开发小程序的功能
- TLS(Thread Local Storage)问题demo
- WPS最大的败笔是“免费用,广告弹窗”,难怪用户纷纷使用office
- ppt生成器_#PPT素材神器#在线卡通头像生成器: avataaars generator
- android设置view透明度渐变,android中 怎么实现一张图片从左到右透明度改变渐变消失的动画效果 Android 动态渐变 泽.. - 贪吃蛇学院-专业IT技术平台...
- python批量查询ip归属地_IP地址地理信息批量查询小工具
- 高数_第1章空间解析几何与向量代数__直线方程
- cad隐藏图层命令快捷键_CAD关闭图层快捷键,隐藏显示的CAD图层
- 极飞亮相世界无人机大会,创始人彭斌讲述农业无人机的未来
- 如何在Mac上设置iCloud
- 硬盘装机后,删除开机启动项
热门文章
- RIP协议介绍及配置
- Maven简明教程(4)---依赖关系(理论篇)
- SQL Server启动出现“指定的服务未安装”的解决方法
- GMQ Wallet 跨时代产品,全面体现区块链数字资产价值
- xml文件的生成和下载
- 使用freemarker模板生成带图片的word--xml格式
- C++基础编程题(06)求调和平均数(两个数,的倒数平均值的倒数)
- LeetCode--分发饼干(贪心)
- Java基础之多线程的创建方式以及命名
- 一文读懂原型链 prototype和__proto__详解