IoC原理之IoC容器系列的设计与实现

Spring IOC深度解析:IOC容器的原理与高级特性详解 控制反转是一种设计原理,用于减少计算机代码之间的耦合度。在没有IOC的传统程序设计中,对象的创建以及它们之间的依赖关系通常是由开发者在代码内部显式地定义。而在使用IOC之后,这些工作被反转了:不再由对象自身控制依赖对象的创建和管理,而是交由外部容器来处理,对象只是声明它所需要的资源或依赖。// 传统方式创建对象及其依赖对象// 使用IOC容器后的对象声明方式// 依赖注入。 阅读详情

在Spring IoC容器的设计中,我们可以看到两个主要的容器系列,一个是实现BeanFactory接口的简单容器系列,这系列容器只实现了容器的最甚本功能.另一个是ApplicationContext应用上下文,它作为容器的高级形态而存在。应用上下文在简单容器的基础上,增加了许多面向框架的特性,同时对应用环境作了许多适配。有了这两种墓本的容器系列.基本上可以满足用户对IoC容器使用的大部分需求了。

loC容器的接口

loC容器的接口设计图如下:

  • 从接口BeanFactory到HierarchicalBeanFactory,再到Configurable Bean Factory,是一条主要的BeanFactory设计路径。在这条接口设计路径中,BeanFactory接口定义了基本的IoC容器的规范。在这个接口定义中.包括了getBean()这样的IoC容器的基本方法(通过这个方法可以从容器中取得Bean)。而HierarchicalBeanFactory接口在继承了eanFactory的基本接口之后.增加了getParentBeanFactory ()的接口功能.使BeanFactory其备了双亲IoC容器的管理功能。在接下来的ConfigurableBeanFactory接口中,主要定义了一些对BeanFactory的配置功能,比如通过setParentBeanFactory()设置双亲IoC容器,通过addBeanPostProcessor()配iBean后里处理器,等等。通过这些接口设计的叠加,定义了BeanFactory就是简单IoC容器的基本功能。

  • 第二条接口设计主线是以ApplicationContext应用上下文接口为核心的接口设计。这里涉及的主要接口设计有,从Bean Factory到ListableBeanFactory,再到ApplicationContext,再到我们常用的WebApplicationContext或者ConfigurableApplicationContext接口。我们常用的应用上下文甚本上都是ConfigurableApplicationContext或者WebApplicationContcxt的实现。在这个接口体系中,ListableBeanFactory和HierarchicalBeanFactory两个接口.连接BeanFactory接口定义和ApplicationConext应用上下文的接口定义。在ListableBeanFactory接口中,细化了许多BeanFactory的接口功能,比如定义了getBeanDefinitionNames()接口方法。对于ApplicationContext接口,它通过继承MessageSource, ResourceLoader,ApplicationEventPublisher接口,在BeanFactory简单loC容器的基础上添加了许多对高级容器的特性的支持。

如下是BeanFactory接口的抽象:

public interface BeanFactory {

    String FACTORY_BEAN_PREFIX = "&";

    Object getBean(String name) throws BeansException;

    <T> T getBean(String name, Class<T> requiredType) throws BeansException;

    <T> T getBean(Class<T> requiredType) throws BeansException;

    Object getBean(String name, Object... args) throws BeansException;
    //判断容器是否含有指定名字的bean
    boolean containsBean(String name);   
    //判断指定名字的bean是否是Singleton类型,定义的时候可以指定
    boolean isSingleton(String name) throws NoSuchBeanDefinitionException;
    //判断指定名字的bean是否是Prototype类型,定义的时候可以指定
    boolean isPrototype(String name) throws NoSuchBeanDefinitionException;
    //判断指定名字的bean的Class类型,是否是指定的类型
    boolean isTypeMatch(String name, Class<?> targetType) throws NoSuchBeanDefinitionException;
    //得到指定名字的bean的Class类型
    Class<?> getType(String name) throws NoSuchBeanDefinitionException;
    //获取指定名字的bean的所有别名,定义的时候可以指定
    String[] getAliases(String name);

}

在Spring的代码实现中BeanFactory只是一个接口类,并没有给出容器的具体实现,各种具体实现,比如DefauItListableBeanFactory,XmlBeanFactory, ApplicationContext等都可以看成是容器附加了某种功能的具体实现,也就是容器体系中的具体容器产品。

BeanFactory分析

以 XmlBeanFactory 为例,看看BeanFactory容器的设计原理:

public class XmlBeanFactory extends DefaultListableBeanFactory {

    private final XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(this);

    public XmlBeanFactory(Resource resource) throws BeansException {
        this(resource, null);
    }

    public XmlBeanFactory(Resource resource, BeanFactory parentBeanFactory) throws BeansException {
        super(parentBeanFactory);
        this.reader.loadBeanDefinitions(resource);
    }

}

从源码可以看出,XmlBeanFactory只实现了xml读取的功能,并且还不是自己写的,是通过引用XmlBeanDefinitionReader来实现的,而IoC容器功能是通过继承DefaultListableBeanFactory实现的。 在Spring中,实际上是把DefaultListable BeanFactory作为一个默认的功能完整的loC容器来使用的。

XmlBeanFactory设计的类继承关系如下图:

ApplicationContex分析

以FileSystemXmlApplicationContex来说明ApplicationContex容器的设计原理。

public class FileSystemXmlApplicationContext extends AbstractXmlApplicationContext {

    public FileSystemXmlApplicationContext() {
    }

    public FileSystemXmlApplicationContext(ApplicationContext parent) {
        super(parent);
    }

    public FileSystemXmlApplicationContext(String configLocation) throws BeansException {
        this(new String[] {configLocation}, true, null);
    }

    public FileSystemXmlApplicationContext(String... configLocations) throws BeansException {
        this(configLocations, true, null);
    }

    public FileSystemXmlApplicationContext(String[] configLocations, ApplicationContext parent) throws BeansException {
        this(configLocations, true, parent);
    }

    public FileSystemXmlApplicationContext(String[] configLocations, boolean refresh) throws BeansException {
        this(configLocations, refresh, null);
    }

    public FileSystemXmlApplicationContext(String[] configLocations, boolean refresh, ApplicationContext parent)
            throws BeansException {

        super(parent);
        setConfigLocations(configLocations);
        if (refresh) {
            refresh();
        }
    }

    @Override
    protected Resource getResourceByPath(String path) {
        if (path != null && path.startsWith("/")) {
            path = path.substring(1);
        }
        return new FileSystemResource(path);
    }

}

这里有两个可看的地方,第一个是FileSystemXmlApplicationContext中refresh()过程会牵涉loC容器启动的一系列复杂操作,同时,对于不同的容器实现,这些操作都是类似的,因此在基类中将它们封装好。

第二个是getResourceByPath 功能是与FileSystemXmlApplicationContext设计具体相关的功能,这部分与怎样从文件系统中加载XML的Bean定义资源有关。

【项目立项管理、项目整合管理】30天通过软考高项-第二天 ①项目或阶段的概述;②范围目标、范围的评估标准,证明达到完⼯标准的证据;③质量目标、项目和产品质量的评估标准、相关核实信息和实际里程碑交付日期以及偏差原因;④成本目标,包括可接受的成本区间、实际成本,产⽣任何偏差的原因等;⑤最终产品、服务或成果的确认信息的总结;⑥进度计划目标,包括成果是否实现项目预期效益:如果在项目结束时未能实现效益,则指出效益实现程度并预计未来实现情况; 阅读详情

相关推荐

OpenV2X 车路协同开源平台 Columbia 版本正式发布!

OpenV2X车路协同开源平台Columbia 版本正式发布!

weixin_65571684的博客 1198

IOC容器及其原理

文章目录1、什么是IOC2、IOC底层原理3、IOC容器接口4、IOC的Bean管理5、基于XML配置方式管理Bean1、IOC基于XML方式注册组件2、工厂Bean3、IOC对Bean的生命周期管理4、IOC属性注入自动装配6、基于注解方式管理Bean1、基于注解实现组件注册2、基于注解实现属性自动注入 1、什么是IOC (1)控制反转,把对象创建和对象之间的调用过程,交给 Spring进行管理 (2〉使用IOC目的:为了耦合度降低 (3)做入门案例就是IOC 实现 2、IOC底层原理 (1)xml解析、

code_java_zqy 1220

redhawk-sc(seascape)学习日志2

design view是主view,是所有seascape view中最root的部分,一个design view可以驱动多种类型分析比如静态IR drop,动态IR drop以及EM.这些分析可以在不同的PVT和翻转率下.Design view是一个必须的view对于redhawk中的任何类型分析来说。seascape view相当于一个容器,用于保存各种和设计相关的数据,类似于逻辑信息、物理信息等等,每个view都有其对应的输入件和依赖,这些view都是redhawk用于各种类型的分析所需。

qq_39493558的博客 3497

开涛spring3(2.1) - IoC基础

2.1.1 IoC是什么 Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对 象内部直接控制。如何理解好Ioc呢?理解好Ioc的关键是要明确“谁控制谁,控制什么,为何是反转(有反转就应该有正转了),哪些方面反转了”,那我们 来深入分析一下: ●谁控制...

dengkuituo0680的博客 313

STK与Matlab连接报错?手把手教你解决mexConnect函数执行问题(附完整避坑指南)

本文针对STK与Matlab连接时常见的“mexConnect函数执行”报错,提供了完整的诊断与解决方案。文章深入剖析了错误根源在于路径冲突或文件损坏,并手把手指导用户通过定位STK连接器文件、正确配置Matlab路径(包括使用addpath命令)以及执行初始化测试三步走策略,彻底解决问题。同时附上版本兼容性检查、安装避坑指南及构建稳健工作流的建议,帮助用户建立可靠的STK-Matlab联合仿真环境。

yolo5detector的博客 472

科研党必备:Python脚本批量下载DOI文献的保姆级教程(附避坑指南)

本文为科研人员提供了一份详细的Python脚本批量下载DOI文献的教程,涵盖环境配置、核心功能实现、性能优化及常见问题解决。通过自动化脚本,研究者可高效完成文献批量下载,显著提升科研工作效率,特别适合需要处理大量文献的研究团队使用。

weixin_26965807的博客 476

【第二章】 IoC 之 2.2 IoC 容器基本原理 ——跟我学Spring3

2.2.1  IoC容器的概念 IoC容器就是具有依赖注入功能的容器,IoC容器负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。应用程序无需直接在代码中new相关的对象,应用程序由IoC容器进行组装。在Spring中BeanFactory是IoC容器的实际代表者。 Spring IoC容器如何知道哪些是它管理的对象呢?这就需要配置文件,Spring IoC容器通过读取配置...

jinnianshilongnian的专栏 392

C2000 ePWM与SDFM同步配置:从寄存器到Driverlib实战解析

在嵌入式实时控制系统中,脉宽调制(PWM)是实现电机驱动、数字电源等应用的核心技术,其信号质量和时序精度直接决定了系统性能。为实现精确控制,PWM信号常需与模数转换器(ADC)或Sigma-Delta滤波器(SDFM)的采样时刻严格同步,以消除开关噪声并获取准确的反馈信号。其技术原理在于通过硬件同步机制,将PWM的特定时间点(如周期中心)作为触发源,控制数据采集的启动时刻。这种硬件级同步能有效提升闭环控制的稳定性和动态响应速度,广泛应用于伺服驱动、变频器等高性能场景。本文聚焦于TI C2000系列微控制器,

weixin_33692284的博客 442

Spring IoC容器:原理与实现机制深度解析

Spring IoC容器是Spring框架的核心组件,通过控制反转和依赖注入机制,实现了对象的松耦合管理。本文深入分析了IoC的基本概念、容器的核心接口、Bean的生命周期管理、依赖注入的实现方式、容器的初始化过程、循环依赖的解决方案、基于注解的配置方式以及设计模式的应用。通过对这些核心机制的深入理解,开发者可以更好地利用Spring IoC容器构建可维护、可测试和可扩展的应用程序。Spring IoC容器的设计思想不仅适用于Java应用开发,也对其他语言和框架产生了深远影响,成为现代软件设计的重要范式。

程序媛学姐的博客 2234

Plant Simulation新手入门:5步搞定生产线物流仿真(附模型库使用技巧)

本文为Plant Simulation新手提供了从零开始构建生产线物流仿真的五步入门指南。通过理念重塑、流程规划、对象连接、参数设置到数据分析的完整流程,帮助用户快速掌握这一强大仿真工具的核心逻辑。文章特别强调了模型库的高效使用技巧,助力工程师在虚拟环境中精准模拟和优化生产系统,提升规划效率。

efc123456的博客 333

关键!C#工业上位机界面设计终极指南:WinForm/WPF怎么选?【工业实战完整版,无废话选型+避坑+落地技巧】

工业上位机UI选型指南:WinForm与WPF核心对比 摘要: 本文基于工业实战视角,对比WinForm与WPF在工业上位机开发中的适用性。WinForm凭借GDI+原生渲染、极致兼容性(完美支持Win7/XP)、低资源占用和硬件底层调用优势,成为老旧工控机、简单监控系统和7×24小时运行设备的首选。WPF则依托DirectX硬件加速、MVVM架构和强大可视化能力,更适合复杂可视化大屏、3D模拟等高端场景及需要长期迭代的大型项目。核心选型原则是:优先考虑稳定性与兼容性,WinForm解决"能不能用

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 728

三、IOC容器原理

三、IOC容器原理 1、概述 Sun ONE技术体系下的IOC容器有:轻量级的有Spring、Guice、Pico Container、Avalon、HiveMind;重量级的有EJB;不轻不重的有JBoss,Jdon等等。Spring框架作为Java开发中SSH(Struts、Spring、Hibernate)三剑客之一,大中小项目中都有使用,非常成熟,应用广泛,EJB在关键性的工业级项目中也被使用,比如某些电信业务。.Net技术体系下的IOC容器有:Spring.Net、Ca...

L_D_Y_K的博客 1489

【RBF预测】基于粒子群算法优化RBF神经网络实现数据回归预测含Matlab源码

1 简介 原油含水率预测对于确定油井水,油层位以及估计原油产量有着非常重要意义.BP神经网络是最近常用的原油含水率预测方法,然而,由于BP神经网络存在容易陷入局部极小值,收敛速度慢等问题,影响了其预测的实用性和准确性,对此,提出基于粒子群优化RBF神经网络(PSO-RBFNN)的原油含水率预测方法,粒子群优化算法用于RBF神经网络参数优化.在分析原油含水率预测的影响因素基础上,建立粒子群优化RBF神经网络的原油含水率预测模型.实验结果表明,在原油含水率预测中,基于粒子群优化RBF神经网络比BP神经网络有着

qq_59747472的博客 1232

Spring----IoC容器源码分析----初始化过程

一、在Spring IoC容器的设计中,有两个主要的容器系列: 一个是实现BeanFactory接口的简单容器系列,这系列的容器只实现了容器的最基本功能。 另一个是ApplicationContext应用上下文,它作为容器的高级形态而存在。应用上下文在简单容器的基础上,增加了许多面向框架的特性,同时对应用环境作了许多适配。 二、Spring中Ioc容器主要接口设计 红色这一条是一条主要的...

qq_31473465的博客 315

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Spring技术内幕 :IoC容器的实现(二)—— IoC容器系列的设计与实现:BeanFactory和ApplicationContext

在上一篇Spring Framework的核心:IoC容器的实现(一)—— Spring IoC的概述中,我们简单回顾了一下Spring IoC容器中依赖反转的概念以及Spring IoC的应用场景,本文将开始简单了解一下具体容器的继承关系及应用场景。在Spring IoC容器的设计中,可以看到主要的两个容器系列,一个是实现BeanFactory接口的简单接口系列,这个系列的容器只实现了最基本的功...

在途中 289

深度学习工具包 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技术内幕——Spring Framework的IOC容器实现(一)

一、SpringIOC容器概述 IOC容器和依赖反转的模式 在面向对象的系统中,对象封装了数据和对数据的处理,对象的依赖关系常常体现在对数据和方法的依赖上。这些依赖关系可以通过把对象的依赖注入交给框架IOC容器来完成。他可以再解耦代码的同时提高了代码的可测试性。 依赖控制反转的实现由很多种方式,在Spring中,IOC容器是实现这个模式的载体,他可以再对象生成或者初始化时直接将数据注入到对象中

路漫漫,水迢迢 2209

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

解读Spring Ioc容器设计图

在Spring Ioc容器的设计中,有俩个主要的容器系列:一个是实现BeanFactory接口的简单容器系列,这系列容器只实现了容器最基本的功能;另外一个是ApplicationContext应用上下文,他作为容器的高级形态而存在。 1 Ioc 容器系列 IOC容器为开发者管理对象之间的依赖关系提供了很多便利和基础服务。 什么是IOC容器?它在Spring容器中到底长什么样? 对于IOC容...

weixin_30894389的博客 121

Spring技术内幕2Spring Framework的核心:IoC容器的实现

1SpringIoC容器概述 IoC容器和依赖反转模式: 早在2004年,Martin Fowler就提出了“哪些方面的控制被反转了?”这个问题。他总结出是依赖对象的获得被反转了。基于这个结论,他为控制反转创造了一个更好的名字:依赖注入。许多非凡的应用(比HelloWorld.java更加优美,更加复杂)都是由两个或是更多的类通过彼此的合作来实现业务逻辑,这使得每个对象都需要,与其合作的对

java相关技术(partner4java专栏)希望对您的学习有所帮助 4677

Spring IoC 容器的设计与实现精析,比教材更易理解的详细解读在这里!

1.spring的IOC容器 在 Spring IoC 容器的设计中,容器有两个系列,可以看成是容器的具体表现形式: BeanFactory 简单容器:实现了容器的基本功能,典型方法如 getBean、containsBean、isSingleton; ApplicationContext 应用上下文:在简单容器的基础上,增加上下文的特性。 解读: 为什么要设计两个系列,而不是一个?这就涉及到架构...

weixin_34082177的博客 311

Spring——什么是IOC?

Spring进行IOC操作: ● xml解析 ● 工厂模式 ● 反射(通过得到字节码文件操作文件)

一起加油吧~ 1541

深入剖析Spring IOC容器——原理、源码与实践全解析

本文深入解析Spring框架的核心设计思想——控制反转(IOC)与依赖注入(DI)。通过源码分析和可视化流程图,详细阐述了IOC容器的架构设计、Bean生命周期管理及其在现代框架中的演进。文章对比了三种依赖注入方式的适用场景,剖析了循环依赖的解决方案,并提供了性能优化建议与最佳实践。作者"励志成为糕手"强调理解IOC对掌握Spring设计哲学的重要性,指出IOC不仅是技术实现,更代表了软件开发范式的转变,能显著提升代码解耦性和可测试性。全文结合Spring 6.x最新源码,为开发者提供了

言不信者行不果,行不敏者言多滞. 2万+

Spring IoC 容器的设计与实现原理

上一篇文章讲解的是IOC的原理,这一篇文章主要讲解Spring IoC 容器的设计与实现原理   1.spring的IOC容器 在 Spring IoC 容器的设计中,容器有两个系列,可以看成是容器的具体表现形式: BeanFactory 简单容器:实现了容器的基本功能,典型方法如 getBean、containsBean、isSingleton; ApplicationCo...

菜鸟不会飞 2059

Spring IoC容器设计原理及高级特性

文章目录Spring IoC容器概述IoC容器系列的设计与实现:BeanFactory和ApplicationContextBeanFactoryBeanFactory容器的设计原理ApplicationContextApplicationContext容器的设计原理IoC容器的初始化过程IoC容器的依赖注入依赖注入发生的时间依赖注入的流程图依赖注入的源码分析容器其他相关特性的设计与实现Appli...

蓝田日暖玉生烟 5349

IoC之IoC容器基本原理

上一篇学习了IoC的基础知识,明白了IoC是什么,为什么需要使用IoC以及IoC和DI的区别,接下来让我们继续往下学习IoC容器的基本原理。 IoC容器的概念 IoC容器就是具有依赖注入功能的容器,IoC具有负责实例化,定位,配置应用程序中的对象及建立这些对象之间的依赖。应用程序无需直接new相关对象,应用程序通过IoC容器进行组装。在Spring中IoC容器实际代表者是BeanFactory。 ...

weixin_41676282的博客 6341

IOC容器(详细讲解)

IOC容器(详细讲解) 一、IOC底层原理 二、IOC接口 三、Bean管理

酷小亚 1万+

Spring IoC核心容器学习:原理与实践

控制反转(Inversion of Control,IoC)是一种设计原则,其核心思想是将对象的创建和管理交给一个专门的容器来完成,而不是由对象自身来管理。这样可以降低代码的耦合性,提高代码的可维护性和可测试性。在Spring框架中,IoC容器就是负责管理对象生命周期和依赖关系的核心组件。说白了就是将对象的创建权利交出去,我们不需要再自己new对象,交给第三方容器负责创建,同时对象和对象之间关系的维护权也给第三方容器负责。对与IOC容器的学习,我们需要知道如何创建IOC容器如何获取IOC容器里的对象。

LYH2771994122的博客 2292
上一篇: Spring整体架构
下一篇: 接口回调用法解析
She_lock
博客等级 码龄12年 157粉丝 134原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值