实例区别BeanFactory和FactoryBean

OpenVPN 新增 windows 客户端 虚拟私人网络(Virtual Private Network,简称VPN)是一种网络技术,它允许用户通过公共网络(如互联网)建立一个安全的连接通道。本文介绍如何添加 windows 客户端。 阅读详情

前言

从代码角度写了一个帖子去解释BeanFactory和FactoryBean,感概下Mybatis对Spring框架用的炉火纯青的水平。更多Spring内容进入【Spring解读系列目录】。

BeanFactory

什么是BeanFactory?看名字也能明白这是一个工厂,其实是Spring框架中的一个顶层类。是Spring提供的一个工厂,能够产生注册在Spring中的对象。比如BeanFactory.getBean(),就可以拿到一个bean的实例对象。或者实例化AnnotationConfigApplicationContext类就可以拿到其对象,也就是说BeanFactory是为了产生对象使用的。这个其实没什么好讲的,重点就在于FactoryBean。

BeanFactory bean=new AnnotationConfigApplicationContext();
bean.getBean("service");

FactoryBean

FactoryBean是Spring中的一个特殊的bean。什么是bean呢?其实只要一个类交给Spring容器管理就可以称作一个Bean,也可以直接说就是一个对象。那FactoryBean有什么特殊性呢?那就是FactoryBean可以构造一个新的bean出来。我们先用一个例子来简单说下,先创建一个测试类TestDaoFactoryBean,然后创建一个MyDaoFactroyBean类实现FactoryBean,再实现里面的方法,起个名字叫factoryBeanTest。

public class TestDaoFactoryBean { }
@Component("factoryBeanTest")
public class MyFactroyBean implements FactoryBean {
    @Override
    public Object getObject() throws Exception {
        return new TestDaoFactoryBean(); //getObject返回新构建的类
    }
    @Override
    public Class<?> getObjectType() {
        return TestDaoFactoryBean.class;
    }
    @Override
    public boolean isSingleton() {  //设置单例模式
        return true;
    }
}

构建完成以后我们就尝试去把MyFactroyBean拿出来,所以我们用一个Test类取一下:

public class Test {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext anno=new AnnotationConfigApplicationContext(AppConfig.class);
        System.out.println(anno.getBean("factoryBeanTest"));
    }
}
打印结果:
com.demo.dao.TestDaoFactoryBean@701fc37a

最终运行的结果发现取出来的并不是MyFactroyBean,而是我们在getObject()这个方法里返回的对象。那么怎么拿到MyFactroyBean呢,只要把名字前面加一个”&”符号就可以了

System.out.println(anno.getBean("&factoryBeanTest"));
打印结果:
com.demo.dao.MyFactroyBean@701fc37a

为什么会这样呢?先不解释,不过根据这个现象我们总结一下:
如果一个类实现了FactoryBean,那么Spring容器中就会生成两个对象,一个是getObject()方法返回的对象,还有一个是当前的对象(也就是this本身)。getObject()对象存的是指定的对象,在Bean上指定名字的对象。当前对象是存的是”&”+当前类的名字。

FactoryBean的作用

要想解释为什么Spring要这样设计,首先我们看先看FactoryBean有什么具体的作用。做一个假设,我们需要引用第三方的一个jar包,这里面有一个配置类A,而这个配置类A又依赖了其他100个类。那么请问,这个其他的100个类的依赖,应该由谁去管理呢?不管由谁管理,一定不是让使用者管理对不对,我们期望的是在Spring中配置了一个A的bean,就可以正常使用这个jar包了,而不是说要使用者把A中所有的依赖都维护一遍,这显然不合理。比如我们经常使用的Mybatis就是一个非常经典的例子。

一般来说都会把Mybatis交给Spring管理,如果Mybatis里面使用的第三方的类也都需要开发人员去维护是不是极为不合理。所以我们期望就是Mybatis自己维护好自己的关系,然后提供一个bean(对象)出来,我只要维护这个bean就可以完成Spring的管理了。以Mybatis中的SqlSessionFactory为例。如果要我们自己配Spring依赖关系,首先要配一个SqlSessionFactory的bean,然后发现里面依赖了Configuration对象,又要配置一堆依赖关系,配完以后Configuration对象又依赖了Environment对象和好几十个其他对象,要一个一个配bean出来,单单交给Spring管理那就是一个相当巨大的工程了,还不如自己写来的简单。所以最好的办法就是Mybatis自己把这一切的关系都维护好了,使用者只要引用SqlSessionFactory一个bean就搞定了,这个时候FactoryBean就有大作用了。Mybatis也提供了这样一个bean叫做SqlSessionFactoryBean就做了这样一个事情。

#Mybatis提供的FactorBean:
public class SqlSessionFactoryBean implements FactoryBean<SqlSessionFactory>, InitializingBean, ApplicationListener<ApplicationEvent> {
	...
	private SqlSessionFactory sqlSessionFactory;
	...
	@Override
	public SqlSessionFactory getObject() throws Exception {
	  if (this.sqlSessionFactory == null) {
 	   afterPropertiesSet();
	  }
 	 return this.sqlSessionFactory;
	}
	...
}

这个类也实现了FactoryBean,虽然叫做SqlSessionFactoryBean但是它最终返回的是SqlSessionFactory。在SqlSessionFactoryBean中Mybatis就把Configuration,Environment等等这些对象提前初始化,并且用setter方法赋值,那么最终我们拿到的bean就是已经初始化好了对象直接可以用。

FactoryBean使用范例

所以为了加深理解,我们也可以做一个例子,首先我们改造一下TestDaoFactoryBean让其具备一些属性。

public class TestDaoFactoryBean {
    private String a1;
    private Integer a2;
    public String getA1() {
        return a1;
    }
    public void setA1(String a1) {
        this.a1 = a1;
    }
    public Integer getA2() {
        return a2;
    }
    public void setA2(Integer a2) {
        this.a2 = a2;
    }
}

然后修改MyFactroyBean,并且在里面初始化TestDaoFactoryBean。

@Component("factoryBeanTest")
public class MyFactroyBean implements FactoryBean {
    @Override
    public Object getObject() throws Exception {
        TestDaoFactoryBean factoryBean=new TestDaoFactoryBean();
        factoryBean.setA1("a1");
        factoryBean.setA2(22222);
        return factoryBean;
    }
    @Override
    public Class<?> getObjectType() {
        return TestDaoFactoryBean.class;
    }
    @Override
    public boolean isSingleton() {
        return true;
    }
}

最后获取一下,这样我们就完成了TestDaoFactoryBean的初始化赋值,外部如果要使用就会发现其中的属性a1和a2已经被构建过了。

public class Test {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext anno=new AnnotationConfigApplicationContext(AppConfig.class);
        TestDaoFactoryBean factoryBean= (TestDaoFactoryBean) anno.getBean("factoryBeanTest");
        System.out.println("getA1:"+factoryBean.getA1());
        System.out.println("getA2:"+factoryBean.getA2());
    }
}
打印结果:
getA1:a1
getA2:22222

但是要注意,实现了FactoryBean的本身是和别的bean没有区别的,唯一的区别就是返回的对象要指定,因此这些实现了FactoryBean的bean也可以进行业务实现。当然这点要根据具体的业务具体去分析。

总结

举个不恰当的例子BeanFactory是个鞋厂,FactoryBean就是一个特殊的鞋子,这个鞋子能够根据需求产生新的鞋子,这么牛逼的鞋子,就问你服不服。从名字上看BeanFactory是bean工厂只能生产bean。而FactoryBean是一个bean (对象),但是这个bean能够生产新的bean。好绕,大家理解下。

那么如果有人问道这两个的区别,大概可以这样说:BeanFactory是Spring容器当中的工厂,它能生产我们交给Spring的类,并且获取这些类的对象。FactoryBean只是Spring中的一个特殊的bean接口,FactoryBean需要被实现三个方法,实现以后可以返回一个新的bean,这个新的bean就是getObject()返回出去的对象。并且存在的形式也不同,得到FactoryBean本身需要用&+类名,而要得到FactoryBean产生的对象则要使用真实指定的bean名字。

ESP32 CAM使用教程(入门级) 串口被占用,可以关闭其他使用到串口的界面;先将手机也连上wifi,然后使用手机浏览器打开这个IP地址,注意手机连接的wifi需要和开发板的wifi一致,也就是程序里自己修改的那个wifi,否则无法打开IP地址;将开发板连接到电脑,点击点击工具→端口,然后选择自己实际接的COM口,不清楚COM口的可以打开电脑设备管理器查看一下,插拔设备看看哪个COM口会刷新就是哪个COM口;安装好esp32库之后,点击工具→开发板→esp32→AI Thinker ESP32-CAM,型号要仔细找找,不要选错了; 阅读详情

相关推荐

WindTerm 安装使用教程

WindTerm是一款Github上开源的 SSH 终端工具,它是完全可以比肩MobaXterm工具的。

m0_69576880的博客 4037

关于Spring中FactoryBean

FactoryBean

正儿八经的胡说八道的博客 288

【原创】Ubuntu20.04 安装 Isaac Gym 仿真器

Ubuntu20.04 安装 Isaac Gym

qq_54900679的博客 3095

BeanFactory与FactoryBean的区别

BeanFactory与FactoryBean的区别 BeanFactory与FactoryBean都是Spring中的一个顶层接口,BeanFactory是Spring中的一个Bean工厂,它用于生产bean,获取Bean,而FactoryBean他是一个Bean,是Spring容器管理的,当然,他不是一个普通Bean,是一个特殊的Bean,我们创建一个类,并且添加到Spring容器中,实现FactoryBean的三个方法,而这三个方法就决定了他不是一个普通bean,FactoryBean中有三个方法,分

橘子的博客 298

宏基因组功能注释实战:从CAZyme到VFDB的完整流程(含数据库下载与脚本优化)

本文详细介绍了宏基因组功能注释的完整流程,涵盖CAZyme、eggNOG、CARD和VFDB四大核心数据库的实战应用。从环境配置、数据库下载与预处理到注释流程执行与优化,提供了全面的操作指南和脚本优化建议,帮助研究人员高效完成宏基因组数据分析。特别针对CAZyme注释等关键步骤给出了参数优化方案和常见问题排查方法。

weixin_29289821的博客 296

ROS2_IGH方案配置(二)——Ubuntu22.04 实时内核性能验证与调优

本文详细介绍了在Ubuntu22.04系统上配置ROS2_IGH方案时,如何验证和调优PREEMPT_RT实时内核性能。通过使用cyclictest工具进行基准测试和压力测试,分析中断与硬件延迟,并优化内核参数,确保系统满足工业控制领域对硬实时性的苛刻要求。文章还提供了针对ROS2的特殊优化建议和性能监控方案,帮助开发者实现毫秒级延迟的稳定控制。

weixin_30791095的博客 224

spring1.0初探之FactoryBean解析

上一篇文章中,我们简单分析了spring1.0中容器初始化加载的过程,了解了Bean的创建过程,这一篇我们就着重分析FactoryBean创建bean的过程。 一般情况下,spring都是通过反射机制利用bean的class属性来创建bean,但是,有时候我们bean的创建过程很复杂,依赖很多其他条件,需要bean标签中提供很多配置属性,那么我们的灵活性是受限的。为此spring提供了一个工厂类接口FactoryBean,用户可以通过实现这个接口定制实例化bean的逻辑。FactoryBean对于spri

tong472687551的博客 254

叶绿体基因组提交NCBI全流程避坑指南

叶绿体基因组作为环状细胞器DNA,其数据提交并非简单上传,而是需严格遵循INSDC标准的学术出版行为。其核心原理在于元数据完整性、拓扑结构语义一致性与分类学路径精确匹配;技术价值体现在保障序列可追溯、可复现、可互操作;典型应用场景涵盖植物系统发育、条形码开发及合成生物学底盘构建。实践中,FASTA头行格式、feature table嵌套规则、taxid绑定及BankIt静默校验等环节极易引发失败。本文聚焦NCBI|叶绿体基因组数据上传中的高频报错与隐性约束,提供面向生物信息工程师的实操级规范解析。

weixin_31960565的博客 330

【Spring】FactoryBean和普通Bean的区别

【提问】 Spring中所说的FactoryBean和普通Bean的区别有什么区别? 【解答】 具体区别: 维度不同 Bean只是一个概念,统称所有被SpringIOC工厂(容器)管理的对象,硬要说也要有一个规范,那就是Object。 FactoryBean是一个实际的接口,在spring-beans包中:org.springframework.beans.factory.FactoryBean FactoryBean通过编码方式负责Bean的生成,由于同样会被SpringIOC工厂(容器)所管理,所以可以

幽灵雾的专栏 2558

[网络安全自学篇] 二.Chrome浏览器保留密码功能渗透解析及登录加密入门笔记

最近开始学习网络安全相关知识,接触了好多新术语,感觉自己要学习的东西太多,真是学无止境,也发现了好几个默默无闻写着博客、做着开源的大神。接下来系统分享一些网络安全的自学笔记,希望读者们喜欢。 上一篇文章分享了看雪Web安全总结知识和一个异或解密的示例,本篇文章着重讲解Chrome浏览器保留密码功能渗透解析及登录加密入门笔记,结合实际例子一步步实现浏览器漏洞的挖掘。非常基础的文章,希望对入门的博友们有帮助,大神请飘过,谢谢各位看官!

杨秀璋的专栏 2万+

MATLAB与ROS联合仿真——订阅ROS消息类功能模块介绍

MATLAB与ROS联合仿真——订阅ROS消息类功能模块介绍 (1)输入参数:无 (2)输出参数:Xr和Yr是小车当前在世界坐标系下的坐标 (3)主要作用:作为ROS与MATLAB的通讯接口,从ROS中订阅小车当前的位置信息,并输出 (4)内部结构: (5)具体实现过程:通过ROS工具箱中的Subscribe模块从ROS中订阅话题/gazebo/link_statesa 通过Bus Selector模块选择ROS总线中的Pose

慕羽★的博客 2699

BeanFactory与FactoryBean的区别总结

BeanFactory与FactoryBean的区别总结 其实这两个之间没有联系,只是长得像,所以经常拿来比较。 BeanFactory:是一个原始的spring工厂,也是一个IOC容器或者叫对象工厂,主要负责生产和管理Bean。他是一个接口,没有具体的实现,也不支持许多spring插件,只是为其他具体的IOC容器实现提供了最基本的规范,所以在这个接口基础上派生了许多容器的具体实现,如ApplicationContext。 FactoryBean是一个能生产或者修饰生成对象的工厂Bean,能在BeanFac

Bly000的博客 374

RK3588多核NPU并行加速yolo优化教程:基于线程池的高性能推理实现

本教程详细介绍了RK3588多核NPU的并行加速优化方法。RK3588搭载三个独立NPU核心,总计算能力达6TOPS,但传统单线程方式无法充分发挥其性能。文章从硬件架构分析入手,详细讲解了三核心独立处理架构和多种工作模式,并通过代码示例展示了线程池技术的实现原理。线程池通过预创建工作线程、任务队列和条件变量等核心组件,避免了频繁创建线程的开销,能显著提升NPU的并行处理效率。教程还提供了性能计算公式和内存带宽优化策略,帮助开发者最大化利用RK3588的硬件算力,实现高性能AI推理。

LXY_LOVE36的博客 1024

Spring BeanFactory和FactoryBean的区别、模拟BeanFactory实例化对象的过程

了解应用:https://blog.youkuaiyun.com/mashaokang1314/article/details/87365074 BeanFactory 从应用中我们可以了解到,使用Spring的好处就是,程序员不用再关心对象的创建过程与对象之间依赖关系,这些都交给Spring去管理了。spring通过BeanFactory来管理这些对象,我们只需做到以下几点: 告诉spring哪些类是需要...

mashaokang1314的博客 384

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Bean的四种实例化方式以及BeanFactory和FactoryBean的区别

Bean的四种实例化方式以及BeanFactory和FactoryBean的区别

Michael_Jay的博客 368

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

spring中BeanFactory和FactoryBean的区别

spring中BeanFactory和FactoryBean的区别

淡淡的幸福的博客 7万+

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

BeanFactory和FactoryBean的区别

区别: https://liayun.blog.youkuaiyun.com/article/details/110391066 BeanFactory是个Factory,也就是IOC容器或对象工厂, 而FactoryBean就是个Bean。在Spring中,所有的Bean都是由BeanFactory(也就是IOC容器)来进行管理的。 但对FactoryBean而言,这个Bean不是简单的Bean,FactoryBean是一个能生产或者修饰对象生成的工厂Bean,它的实现与设计模式中的工厂模式和修饰器模式类似。 Fac

weixin_45723046的博客 1万+

BeanFactory 简介以及它 和FactoryBean的区别

BeanFacotry是spring中比较原始的Factory。如XMLBeanFactory就是一种典型的BeanFactory。原始的BeanFactory无法支持spring的许多插件,如AOP功能、Web应用等。 ApplicationContext接口,它由BeanFactory接口派生而来,ApplicationContext包含BeanFactory的所有功能,通常建议比BeanFa...

BIGBAI的博客 2600

每日一面系列之Spring中BeanFactory和FactoryBean区别

BeanFacotry是spring中比较原始的Factory。如XMLBeanFactory就是一种典型的BeanFactory。原始的BeanFactory无法支持spring的许多插件,如AOP功能、Web应用等。ApplicationContext接口,它由BeanFactory接口派生而来,ApplicationContext包含BeanFactory的所有功能,通常建议比BeanFactory优先 BeanFactory和FactoryBean的区别 BeanFactory...

mclongyi的专栏 2252

Spring之BeanFactory和FactoryBean接口的区别

文章目录一、BeanFactory接口二、FactoryBean接口1.简单实现2.增强实现3.FactoryBean的实际使用案例三、总结   Spring框架中的BeanFactory接口和FactoryBean接口因为名称相似,老是容易搞混淆,而且也是面试过程中经常会碰到的一个问题。所以本文就专门给大家整理出来。 一、BeanFactory接口   BeanFactory接口是Spring容...

波波烤鸭的博客 6105

面试中常见的关于BeanFactory和FactoryBean的区别

以Bean结尾,表示它是一个Bean,不同于普通Bean的是:它是实现了FactoryBean接口的Bean,根据该Bean的ID从BeanFactory中获取的实际上是FactoryBean的getObject()返回的对象,而不是FactoryBean本身,如果要获取FactoryBean对象,请在id前面加一个&符号来获取。FactoryBean也是接口,为IOC容器中Bean的实现提供了更加灵活的方式,FactoryBean在IOC容器的基础上给Bean的实现加上了一个简单工厂模式和装饰模式。...

LoveSummer 2万+

BeanFactory和FactoryBean区别

一、BeanFactory 1、简单介绍 这个其实是所有Spring Bean的容器根接口,给Spring 的容器定义一套规范,给IOC容器提供了一套完整的规范,比如我们常用到的getBean方法等。 进入到这个类,我们可以看到如下注释,意思是:访问Spring bean容器的根接口。 2、定义方法 getBean(String name): Spring容器中获取对应Bean对象的方法,如存在,则返回该对象。 containsBean(String name):Spring容器中是否存在该

Evan's Blog ٩(๑❛ᴗ❛๑)۶ 4012

Spring BeanFactory和FactoryBean的区别

目录 一、简介 二、BeanFactory 三、FactoryBean 四、总结 一、简介 在Spring中,有这么2个接口:BeanFactory和FactoryBean,名字很相似,很多小伙伴经常混淆,在面试的时候也经常会被问BeanFactory和FactoryBean两者的区别。本篇文章将详细介绍它们的区别,并结合示例,帮助大家对BeanFactory和FactoryBean有一个很好的认识。 二、BeanFactory BeanFactory是Spring IoC 容器的顶层接口,

weixiaohuai的博客 920

BeanFactory 简介以及它 和FactoryBean的区别(阿里面试)

BeanFacotry是spring中比较原始的Factory。如XMLBeanFactory就是一种典型的BeanFactory。原始的BeanFactory无法支持spring的许多插件,如AOP功能、Web应用等。ApplicationContext接口,它由BeanFactory接口派生而来,ApplicationContext包含BeanFactory的所有功能,通常建议比B...

2655

【小家Spring】一文读懂Spring中的BeanFactory和FactoryBean(以及它和ObjectFactory的区别)的区别

问题来源 开始重视这个问题,源自一次阿里巴巴的二面面试题:说说你对Spring中BeanFactory的理解,它和FactoryBean有什么区别呢? 直接区别 直面意思:Bean工厂、工厂Bean BeanFactory,以Factory结尾,表示它是一个工厂类(接口),用于管理Bean的一个工厂。在Spring中,BeanFactory是IOC容器的核心接口,它的职责包括:实例化、定位、配置应...

架构师:通透,才能写出好代码! 7317

BeanFactory 和 FactoryBean

特性定义Spring 容器的核心接口用户自定义的工厂接口,实现复杂 Bean 创建功能管理和创建 Bean 实例定义如何创建一个特殊的 Bean 实例作用容器整体管理 Bean 生命周期负责产生具体 Bean 的实例返回对象返回被管理的 Bean 实例返回 FactoryBean 生成的 Bean 实例获取 FactoryBean 本身通过获取自身就是一个 Bean,但对外暴露的是它生产的对象一级缓存完成初始化的单例对象。二级缓存。

fqlya的博客 955
上一篇: 从山寨Spring中学习Spring IOC原理-自动装配注解
下一篇: Spring后置处理器BeanPostProcessor的应用
Smallc0de
博客等级 码龄15年 148粉丝 147原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值