当前位置: 首页 > news >正文

Spring源码之BeanFactory与FactoryBean

All Rights Reserved © jackiegu.cn

文章目录

    • 1. BeanFactory
      • 1.1 BeanFactory介绍
      • 1.2 BeanFactory源码
      • 1.3 BeanFactory继承体系
    • 2. FactoryBean
      • 2.1 FactoryBean介绍
      • 2.2 FactoryBean源码
      • 2.3 FactoryBean实战

1. BeanFactory

1.1 BeanFactory介绍

BeanFactory是Spring IOC各种容器的顶级接口,定义了创建Bean实例的一些行为,以及一些对Bean实例的判断行为和获取Bean类型属性的行为;

1.2 BeanFactory源码

public interface BeanFactory {// FactoryBean的实例名称前缀String FACTORY_BEAN_PREFIX = "&";// 返回name名称的Bean实例(包含创建过程)Object getBean(String name) throws BeansException;<T> T getBean(String name, Class<T> requiredType) throws BeansException;Object getBean(String name, Object... args) throws BeansException;<T> T getBean(Class<T> requiredType) throws BeansException;<T> T getBean(Class<T> requiredType, Object... args) throws BeansException;// 返回name名称的Bean实例的提供程序<T> ObjectProvider<T> getBeanProvider(Class<T> requiredType);<T> ObjectProvider<T> getBeanProvider(ResolvableType requiredType);// 判断name名称Bean实例的相关属性boolean containsBean(String name);boolean isSingleton(String name) throws NoSuchBeanDefinitionException;boolean isPrototype(String name) throws NoSuchBeanDefinitionException;boolean isTypeMatch(String name, ResolvableType typeToMatch) throws NoSuchBeanDefinitionException;boolean isTypeMatch(String name, Class<?> typeToMatch) throws NoSuchBeanDefinitionException;// 返回name名称Bean实例的Class类型@NullableClass<?> getType(String name) throws NoSuchBeanDefinitionException;@NullableClass<?> getType(String name, boolean allowFactoryBeanInit) throws NoSuchBeanDefinitionException;// 返回name名称Bean实例的别名String[] getAliases(String name);
}

1.3 BeanFactory继承体系

在这里插入图片描述

根据上面的UML图,可知日常经常使用的ApplicationContextClassPathXmlApplicationContext、以及AnnotationConfigApplicationContext的顶级接口都包含有BeanFactory;


2. FactoryBean

2.1 FactoryBean介绍

FactoryBean是一个工厂Bean,在日常代码中的Controller和ServiceImpl类基本都是被Spring通过反射去创建的Bean实例,而FactoryBean提供了另外一种创建Spring Bean实例的方式,就是实现它的getObject接口,然后返回的实例一样会被Spring IOC容器管理;

2.2 FactoryBean源码

public interface FactoryBean<T> {String OBJECT_TYPE_ATTRIBUTE = "factoryBeanObjectType";// 返回FactoryBean生成的Bean实例@NullableT getObject() throws Exception;// 返回FactoryBean生成的Bean实例的Class类型@NullableClass<?> getObjectType();// 返回FactoryBean生成的Bean实例是否为单例default boolean isSingleton() {return true;}
}

2.3 FactoryBean实战

创建以下几个接口与类

动物接口:

public interface Animal {void sayHello();
}

猫类实现动物接口:

public class Cat implements Animal {@Overridepublic void sayHello() {System.out.println("hello 喵喵喵");}
}

狗类实现动物接口:

public class Dog implements Animal {@Overridepublic void sayHello() {System.out.println("hello 汪汪汪");}
}

创建一个AnimalFactoryBean实现FactoryBean接口:

public class AnimalFactoryBean implements FactoryBean<Animal> {private String type;@Overridepublic Animal getObject() {switch (type) {case "cat":return new Cat();case "dog":return new Dog();default:return null;}}@Overridepublic Class<?> getObjectType() {switch (type) {case "cat":return Cat.class;case "dog":return Dog.class;default:return null;}}public void setType(String type) {this.type = type;}
}

在applicationContext.xml配置文件中配置AnimalFactoryBean

<?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:context="http://www.springframework.org/schema/context"xmlns:p="http://www.springframework.org/schema/p"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><bean name="animalFactoryBean" class="cn.jackiegu.test.bean.AnimalFactoryBean" p:type="cat"/>
</beans>

创建一个测试类

public class AnimalBeanTest {public static void main(String[] args) {String path = "applicationContext.xml";ApplicationContext applicationContext = new ClassPathXmlApplicationContext(path);// FactoryBean工厂返回的实例Animal animal = (Animal) applicationContext.getBean("animalFactoryBean");animal.sayHello();// FactoryBean工厂实例AnimalFactoryBean animalFactoryBean = (AnimalFactoryBean) applicationContext.getBean("&animalFactoryBean");System.out.println(animalFactoryBean);}
}
// 运行结果
hello 喵喵喵
cn.jackiegu.test.bean.AnimalFactoryBean@77258e59

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.exyb.cn/news/show-2803.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

监控系统实践第12天:5天上手Laravel8.5之路由篇(1/5)

监控系统实践第12天&#xff1a;5天上手Laravel8.5之路由篇&#xff08;1/5&#xff09;前言安装与配置Laravel基础功能&#xff1a;路由(Route)路由是什么&#xff1f;设置路由的请求方式定义路由的路径定义路由的内容闭包中定义内容控制器中定义内容视图中定义内容其它内容的…...

学习响应式BootStrap来写融职教育网站,Bootsrtap第三天nav布局

nav导航布局 <!DOCTYPE html> <html lang"zh_CN"> <head><meta charset"UTF-8"><title>融职教育</title><!-- 移动设备优先--><meta name"viewport" content"widthdevice-width, initial…...

前端常见跨域解决方案(全)

文章目录什么是跨域&#xff1f;什么是同源策略&#xff1f;同源策略限制以下几种行为常见跨域场景跨域解决方案一、 通过jsonp跨域二、 document.domain iframe跨域三、 location.hash iframe跨域四、 window.name iframe跨域五、 postMessage跨域六、 跨域资源共享&#x…...

因为一个字符校对问题,我的大厂面试挂了

摘要&#xff1a;字符集是一套符号和编码。校对规则是在字符集内用于比较字符的一套规则。 本文分享自华为云社区《一个字符校对规则引发的血案》&#xff0c;原文作者&#xff1a;DRS技术快客 。 问题现场 我们先看一个建表语句 CREATE TABLE collate_test ( val1 char(32…...

AndroidUtilCode 最强大的工具类

一、前言&#xff1a; AndroidUtilCode 是一个强大易用的安卓工具类库&#xff0c;它合理地封装了安卓开发中常用的函数&#xff0c;具有完善的 Demo 和单元测试&#xff0c;利用其封装好的 APIs 可以大大提高开发效率&#xff0c;如今它主要包括两部分模块&#xff0c;其一是…...

SVN常用命令集合_艾孜尔江撰

在平时的工作中我们大多数情况下喜欢使用Tortoise SVN之类的可视化版本控制工具&#xff0c;但笔者发现&#xff0c;命令行的方式进行版本控制在执行速度上将会更快一些。尽管在大多数情况下使用命令行并不是很方便&#xff0c;但只要用户习惯了&#xff0c;就非常顺畅了。针对…...

什么样才能叫“技术很牛”?

近日&#xff0c;在某论坛上&#xff0c;有人提出了“一直不懂一个问题&#xff0c;什么叫‘技术很牛’&#xff1f;”的问题。详细提问称“说实话&#xff0c;我从本科到硕士&#xff0c;我觉得计算机的技术很多都是看看就会了&#xff0c;多操练下就熟了。可能有些设计问题需…...

金三银四大厂面经总结,java怎么快速创建构造方法

前言 Java作为最全面的语言&#xff0c;国内开发者也是最多的&#xff0c;Java综合起来各方面都不错&#xff0c;在大部分场景下是一种稳健的技术选择。加上近年来安卓的推动&#xff0c;目前也是最流行的一种语言。 现在Java的就业市场看起来还是挺大的&#xff0c;而且工资…...

【项目】springboot中使用kaptcha生成验证码,登录时密码加盐处理

记录使用kaptcha的过程 为前后端分离项目&#xff0c;前端vue框架 0.下载jar包 在maven的网站https://mvnrepository.com/search?qcom.github.penggle 搜索下载jar 导入到工程中 1.添加依赖 <dependency><groupId>com.github.penggle</groupId><art…...

Yocto Build with Bitbake的调试

https://docs.yoctoproject.org/dev-manual/common-tasks.html#recipe-logging-mechanisms 官方文档里有输出调试信息的方法。包含两种&#xff0c;一种是调用python的&#xff0c;一种是bash的。 建议直接使用warning方法&#xff0c;保证输出级别足够。 另外&#xff0c;在…...

IntentService源码分析指南

转载链接&#xff1a;https://www.jianshu.com/p/8a3c44a9173a...

为啥集群小文件治理那么重要,你真的懂吗?

小文件是 Hadoop 集群运维中的常见挑战&#xff0c;尤其对于大规模运行的集群来说可谓至关重要。如果处理不好&#xff0c;可能会导致许多并发症。Hadoop集群本质是为了TB,PB规模的数据存储和计算因运而生的。为啥大数据开发都说小文件的治理重要&#xff0c;说HDFS 存储小文件…...

Flink大数据实时计算系列-第一个程序JAVA版本-分组统计

Flink大数据实时计算系列-第一个程序JAVA版本-分组 在基线版本上增加了分组统计的代码 #Flink代码 package com.flinkniu.flink.operator;import org.apache.flink.api.common.typeinfo.Types; import org.apache.flink...

Ant Design Vue实现a-table表格单元格合并

Ant Design Vue实现a-table表格单元格合并 参考Ant design Vue官网关于行和列合并api https://antdv.com/components/table-cn/ 下面官网对表格合并这块的描述 &#xff01;&#xff01;&#xff01;注意注意注意重要事情说三遍&#xff1a;很多同学都习惯性的将columns写在d…...

css中id和class的区别

css中id和class的区别ID是唯一的类不是唯一的语法区别ID是唯一的 每个元素仅可以有一个ID每个页面仅可以有一个元素拥有这个ID 类不是唯一的 你可以在多个元素中使用相同的类你可以使用多个类在一个元素中 语法区别 id对应css是用样式选择符“#”&#xff08;井号&#xff…...

力扣刷题:动态规划篇

目录322. 零钱兑换题目介绍题目实现5. 最长回文子串题目介绍题目实现518. 零钱兑换 II题目介绍题目实现53. 最大子序和题目介绍题目实现63. 不同路径 II题目介绍[62. 不同路径](https://leetcode-cn.com/problems/unique-paths/)题目实现70. 爬楼梯题目介绍题目实现72. 编辑距离…...

Java面试list 和 set 区别

List和Set的区别 List:&#xff1a;有序&#xff0c;按对象进入的的序保存对象&#xff0c;可可允许多个Null元素对象&#xff0c;可以使用lterator迭取出所有元素。在逐一便历&#xff0c;也可以使用get(int index)获取指定下标的元素 Set&#xff1a;无序&#xff0c;不可重复…...

诚意分享:这里有份超全Java体系化进阶学习图谱

摘要 Apache Kafka是一个分布式消息发布订阅系统。它最初由LinkedIn公司基于独特的设计实现为一个分布式的提交日志系统( a distributed commit log)&#xff0c;之后成为Apache项目的一部分。 成千上万的企业都在使用Kafka&#xff0c;三分之一的世界500强公司也在其中&…...

Twitter教程:如何下载Twitter数据副本?

Twitterrific Mac破解版是一款非常现代化优秀的桌面Twitter客户端,这款软件不仅看起来惊人,它的表现也是非常棒的,本文给大家的带来了如何下载Twitter数据副本的教程。 教程如下 在 iPhone 或 iPad 上打开“Twitter”。&#xff08;您也可以使用 Twitter.com 网站&#xff09…...

【内网学习笔记】8、powercat 的使用

1、下载安装 powercat powercat 可以视为 nc 的 powershell 版本&#xff0c;因此也可以和 nc 进行连接。 powercat 可在 github 进行下载&#xff0c;项目地址为&#xff1a;https://github.com/besimorhino/powercat 下载下来 powercat.ps1 文件后&#xff0c;直接导入即可…...

PHP中使用ElasticSearch

PHP中使用ElasticSearch 使用cURL尝试ElasticSearch查看es基本信息列出所有的Index列举每个Index下的Type添加Index删除Index安装中文分词插件ik (安装完需要重启es)创建一个Index,并设置其结构和分词向Index增加记录POST方式(POST方式不需要传id,id随机生成)查看指定条目…...

一文解决scrapy带案例爬取当当图书

Scrapy框架 简介 Scrapy的五大组件 Spiders(爬虫): 它负责处理所有Responses,从中分析提取数据&#xff0c;获取Item字段需要的数据&#xff0c;并将需要跟进的URL提交给引擎&#xff0c;再次进入Scheduler(调度器) Engine(引擎)&#xff1a; 负责Spider、ItemPipeline、…...

HTTPOXY 漏洞说明

这里有一个核心的背景是&#xff0c; 长久一来我们习惯了使用一个名为"http_proxy"的环境变量来设置我们的请求代理。 http_proxy127.0.0.1:9999 wget http://www.laruence.com/如何形成 在CGI(RFC 3875)的模式的时候&#xff0c; 会把请求中的Header&#xff0c; …...

python_爬虫 03 urllib库

目录 一、urllib库 1.1 urlopen函数 1.2 urlretrieve函数 1.3 urlencode函数 1.4 parse_qs函数 1.5 urlparse和urlsplit 1.6 request.Request类&#xff1a; 1.7 测试&#xff1a;用Request爬取拉勾网数据 1.8 ProxyHandler处理器&#xff08;代理设置&#xff09; 二…...

HTML表单标签,已拿offer附真题解析

前言 校招 -1 年 这个阶段还属于成长期&#xff0c;更需要看重的是你的基础和热情。对于 JS 基础&#xff0c;计算机基础&#xff0c;网络通信&#xff0c;算法等部分的要求会相对高一些。毕竟这个阶段比较难考察你的业务项目中的沉淀&#xff0c;所以只能从基础部分入手考察。…...

java面向对象编程

面向对象 最大特点在于面向对象的编程设计 面向对象主要这几模式为模块化设计&#xff0c;可以进行从用配置。在整个面向对象的设计里面更对情况下考虑的是标准。在使用的时候根据标准进行拼装&#xff0c;而对于面向对象有3个特征 封装性&#xff1a;内部的操作对外部而言不可…...

CentOS安装VirtuanBox

CentOS7安装virtualbox 1.进入virtualbox官网 https://www.virtualbox.org/ 2.点击download 3.点击Linux distributions 4.向下翻至如图&#xff0c;并且进入同种框选页面 5.在/etc/yum.repos.d/目录下新建virtualbox.repo并写入如下内容 [virtualbox] nameOracle Linux / R…...

【项目】springboot中使用kaptcha生成验证码,登录时密码加盐处理

记录使用kaptcha的过程 为前后端分离项目&#xff0c;前端vue框架 0.下载jar包 在maven的网站https://mvnrepository.com/search?qcom.github.penggle 搜索下载jar 导入到工程中 1.添加依赖 <dependency><groupId>com.github.penggle</groupId><art…...

鼻塞用鼻喷剂-调研(成分+刺激性)

称谓&#xff1a; 鼻滴水、鼻喷剂、滴鼻药 鼻喷剂原理: 鼻喷剂刺激鼻腔: 搜集标准&#xff1a; ①拼多多和淘宝上销量≥1 ②删除宠物用滴鼻药水 ③相同成分药水会有多种品牌&#xff0c;不重复列举 ④来自淘宝、 拼多多、京东&#xff0c;搜索关键词为"鼻塞 药水"…...

ESP8266|RPi pico 通过ESP8266搭建web服务器(树莓派pico通过esp8266联网)

文章目录前言软件准备硬件准备接线C/C实现代码实验现象Micropython实现代码实验现象参考资料前言 Raspberry pi pico官网介绍&#xff1a;https://www.raspberrypi.org/documentation/rp2040/getting-started/#board-specificationsESP8266官网介绍&#xff1a;https://www.es…...

html 给图加遮罩,如何给背景图片加颜色遮罩

方法一&#xff1a;通过定位叠加(注意层级关系).block {position: relative;margin: 50px auto;width: 700px;height: 450px;}.block > img {position: absolute;width: 100%;height: 100%;}.block > div {position: absolute;z-index: 2;width: 100%;height: 100%;backg…...

对比分析方法,数据异动的假设,如何找出羊毛党

...

宅家羊毛党是怎么做到月入上万的

互联网时代&#xff0c;早已不是非出门才能赚到钱的时代了&#xff0c;现在就有这样一群人&#xff0c;他们不用出门工作&#xff0c;甚至没有文化和一技之长&#xff0c;但是依靠快准狠的薅羊毛技术&#xff0c;每月收入轻松过万&#xff0c;可以说比普通工薪阶层多的多&#…...

揭秘:为什么羊毛党可以0元购物?

大家好&#xff0c;今天我给大家分享的主题是&#xff1a;为什么羊毛党可以0元购物&#xff1f;0元购物也叫0元免单&#xff0c; 0元免单自从网络购物发展开始至今&#xff0c;早已不再新鲜&#xff0c;可是还是很多人不得其法&#xff0c;不得其道&#xff0c;甚至不知何为。…...

羊毛党千亿产业链,信息安全何去何从?

1月20日凌晨&#xff0c;拼多多被曝出现重大BUG&#xff0c;用户可领100元无门槛券。网友称&#xff1a;有大批用户开始“薅羊毛”&#xff01; 在“薅羊毛”事件发生几个小时后&#xff0c;拼多多客户服务对此事发布了官方回应《关于“黑灰产通过平台优惠券漏洞不正当牟利”的…...

今天,AI公司正在花式「伏击」羊毛党丨618 专题

来源&#xff5c;雷锋网文&#xff5c;周蕾又是一年618&#xff0c;今年也和往常一样&#xff0c;有高举“不买立省100%”大旗的勤俭持家党&#xff0c;杀到眼红的剁手党&#xff0c;临时抱佛脚的抄作业党&#xff0c;以及&#xff0c;绝对不会迟到的羊毛党。“薅羊毛”通常是针…...

双12使用腾讯云WAF反羊毛党、黄牛党战纪全记录

近来拼多多爆出的羊毛党事件使得计算机信息安全再次被提到人们的面前&#xff0c;原本属于计算机安全学科中的“薅羊毛”这一专有名词也被众多普通人所熟知。通过拼多多事件还原我们得知它其实是一个非常简单的“低级错误”导致。 只需花费4毛钱就可以领取一张100元的无门槛优…...

打击羊毛党团队,腾讯云动真格的了!

双十一购物节的火热还未褪去&#xff0c;就在那个安全问题高发的特殊时间段&#xff0c;腾讯云天御系统为各行业客户识别防御了近12亿次的恶意请求&#xff0c;即便按照每个优惠券价值1元来计算&#xff0c;也相当于为商家挽回了12亿元的经济损失&#xff0c;如果形象换算下&am…...

你关注过黑产、羊毛党吗?用户增长的另一面

文末可下载网易严选演讲PDF完整版~上至BAT&#xff0c;下到互联网初创公司&#xff0c;都面临羊毛党的威胁产品总价值活跃用户规模╳单个用户价值–异常用户损失 你知道吗&#xff0c;在你关注用户增长的同时&#xff0c;有一些黑产也在关注你。在2018U-Time冬季巡回现场&#…...

一个羊毛党的自白

以前我写过几篇相关的文章一个悲伤的故事商旅服务的水有多深从空空狐谈信用卡套利国内最近有不少关于羊毛党的报道和介绍&#xff0c;提到羊毛党&#xff0c;似乎就定义为钻系统规则漏洞&#xff0c;动用批量运作的工具&#xff0c;狂薅运营商收益的黑产和灰产。当然&#xff0…...

运营商的反欺诈攻防战(5):黄牛党和羊毛党

移动通信的发展史&#xff0c;同样是一部轰轰烈烈的运营商反欺诈战争史。所谓魔道相长&#xff0c;移动通信的技术发展&#xff0c;给客户带来了越来越多的便利&#xff0c;但也为运营商带来过各种难以想像的风险。而且随着科技进步和时代发展&#xff0c;这些风险还在不断地进…...

抵制羊毛党,图计算“加持”互联网电商风控

本文分享自华为云社区《扒一扒GES如何赋能互联网电商风控》&#xff0c;原文作者&#xff1a;Dr Thunder 。 随着大数据时代的到来&#xff0c;互联网电商风控已经从无风控、人工抽取规则为主的简易规则模型发展到当前基于大数据的风控。与金融风控不同&#xff0c;互联网电商…...

拼多多给羊毛党发年终奖背后的那些事

昨夜凌晨1点至上午10点&#xff0c;9个小时&#xff0c;拼多多出现了重大BUG&#xff0c;平台上可以无限制领取100元无门槛全场通用优惠券&#xff0c;大量羊毛党开始刷券&#xff0c;并且通知了大量的无知群众&#xff0c;所有接到人都参与到这场盛宴中。 被薅最多的是1元钱买…...

看我是如何跟羊毛党战斗的之我也变成羊毛党

一、前言 快钱、飞凡双旦活动已经过去&#xff0c;这里跟大家分享下我是如何跟羊毛党战斗的。/doge 由于是事后写的&#xff0c;所以当时活动的一些截图可能就没有了&#xff0c;大家自行脑补~ 就当顺便给快钱、飞凡打个广告啦~ 二、导火索 作为老东家&#xff0c;有活动当然要…...

应对羊毛党的老手段不管用了,但有些公司依然有办法,他们是怎么做的?

本文由 网易云 发布导语&#xff1a;羊毛党不仅侵犯了厂商的利益&#xff0c;也侵犯了消费者的利益&#xff0c;让本该属于消费者的优惠券、红包等统统被薅走。315是消费者权益保护日&#xff0c;借这次机会&#xff0c;我们来说说羊毛党。提到羊毛党&#xff0c;企业的反应不仅…...

专题三:羊毛党络绎不绝,电商行业防不胜防

电商行业节约了很大程度上人力、物力的成本&#xff0c;但是为什么有些平台的经济效益依然惨淡&#xff1f;有没有想过是黑产在从中作梗…… 据悉&#xff0c;2020年5月8日全国有28个省份、170多地市为了推动城市复工复产&#xff0c;促进城市消费&#xff0c;实现疫情过后的信…...

“购物狂欢节”如何应对“羊毛党”

基于用户画像大数据的电商防刷架构作者&#xff1a;颜国平 转自&#xff1a;https://cloud.tencent.com/developer/article/1006271摘要&#xff1a;最近几年&#xff0c;电商行业飞速发展&#xff0c;各种创业公司犹如雨后春笋大量涌现&#xff0c;商家通过各种活动形式的补贴…...

【观察】“中国算力网”向全社会开放,意味着什么?

今天&#xff0c;算力的重要性已被提升到全新的高度&#xff0c;这是因为算力作为数字经济时代新的生产力&#xff0c;对推动科技进步、行业数字化转型以及经济社会发展都发挥着至关重要的作用。根据中国信通院发布《中国算力发展指数白皮书&#xff08;2022年&#xff09;》显…...

(原创文章)羊毛党何去何从

曾几何时&#xff0c;互联网兴趣了“薅羊毛”这个词&#xff0c;同时开始了一个新兴的职业&#xff1a;“羊毛党”。从月入首付的打车软件羊毛党&#xff0c;到日入万元的外卖羊毛党&#xff0c;当前该职业已渗透当互联网行业的方方面面。同时也催生了更多的上下游&#xff0c;…...

苹果的福利被“羊毛党”薅废了

本文转载自IT之家 AppleCare 是果粉们都很熟悉的一项付费服务&#xff0c;你去逛 Apple Store 时店员不一定会推销 iPhone&#xff0c;但买单时大概率会被安利一波 AppleCare。 AppleCare 说白了就是意外险&#xff0c;一旦苹果设备出现碎屏、浸液、开不了机等问题&#xf…...