Spring揭秘-2.IOC容器

本文详细介绍了IoC(控制反转)的概念及其别名依赖注入(Dependency Injection),并探讨了IoC的三种主要注入方式:构造方法注入、setter注入和接口注入。对比了这三种注入方式的优缺点,以及IoC在软件设计中的应用价值。

定义

IoC (Inversion of Control)控制反转,别名依赖注入(Dependency Injection)
例子
我们最初的程序是如果我们需要一个对象提供服务

public FXNewsProvider(){
	newsListener = new DowJonesNewsListener();
	newPerListener = new DowJonesNewsPersister();
}

IOC 的三种注入

IoC 的 主要思想是将自己需要的依赖类不需要自己new ,变成 IoC Service Provider 提供,只需要你需什么,我们就提供什么。
注入的方式有三种

  1. 构造方法注入
    会发现没有自己new IFXnewsListener 对象 ,而且可以需要什么样的具体实现类可以自己注入
public FXNewsProvider(IFXnewsListener newsListner,IFXNewsPersister newsPersister){
	this.newsListener = newsListner;
	this.newPerListener = newsPersister;
}
  1. setter注入
    set的好处是 不需要像构造方法注入那样,让对象构造完后即可使用,但相对来说更宽松一些,想需要什么类型set什么类型
public class FXNewsProvider{
	private IFXNewsListener newsListener;
	private IFXNewsPersister newPersistener;
	public IFXNewsListener getNewsListener(){
		return newsListener;
	}
	public void setNewsListener(IFXNewsListener newsListener){
		this.newsListener = newsListener;
	}
	public IFXNewsPersister getNewPersistener(){
		return newPersistener;
	}
	public void setNewPersistener(IFXNewsPersister newsPersister){
		this.newsPersister= newsPersister;
	}
}
  1. 接口注入
    相对于前两种注入方式来说,接口注入没那么简单,要实现IoC Service Provider 为其注入依赖对象,就必须实现某些接口。这个接口提供一个方法,用来注入依赖对象。IoC Service Provider 最终通过这些接口来了解应该为被注入对象注入什么以来。 不常用

在这里插入图片描述

三种注入比较

  • 接口注入。从注入方式的使用上来说,接口注入是现在不甚提倡的一种方式,基本处于“退 役状态”。因为它强制被注入对象实现不必要的接口,带有侵入性。而构造方法注入和setter 方法注入则不需要如此。
  • 构造方法注入。这种注入方式的优点就是,对象在构造完成之后,即已进入就绪状态,可以 9 马上使用。缺点就是,当依赖对象比较多的时候,构造方法的参数列表会比较长。而通过反 射构造对象的时候,对相同类型的参数的处理会比较困难,维护和使用上也比较麻烦。而且 在Java中,构造方法无法被继承,无法设置默认值。对于非必须的依赖处理,可能需要引入多 个构造方法,而参数数量的变动可能造成维护上的不便。
  • setter方法注入。因为方法可以命名,所以setter方法注入在描述性上要比构造方法注入好一些。 另外,setter方法可以被继承,允许设置默认值,而且有良好的IDE支持。缺点当然就是对象无法在构造完成后马上进入就绪状态。

IOC上的附加值

新的要求 构建在IoC之上可重用的FXNewsProvider

FXNewsProvider dowJonesNewsProvider = new FXNewsProvider(new DowJonesNewsListener(),new DowJonesNewsPersister());
转变为
FXNewsProvider dowJonesNewsProvider = new FXNewsProvider(new Marker24NewsListener()(),new Marker24NewsPersister());
内容概要:本文介绍了基于贝叶斯优化的CNN-LSTM混合神经网络在时间序列预测中的应用,并提供了完整的Matlab代码实现。该模型结合了卷积神经网络(CNN)在特征提取方面的优势与长短期记忆网络(LSTM)在处理时序依赖问题上的强大能力,形成一种高效的混合预测架构。通过贝叶斯优化算法自动调参,提升了模型的预测精度与泛化能力,适用于风电、光伏、负荷、交通流等多种复杂非线性系统的预测任务。文中还展示了模型训练流程、参数优化机制及实际预测效果分析,突出其在科研与工程应用中的实用性。; 适合人群:具备一定机器学习基基于贝叶斯优化CNN-LSTM混合神经网络预测(Matlab代码实现)础和Matlab编程经验的高校研究生、科研人员及从事预测建模的工程技术人员,尤其适合关注深度学习与智能优化算法结合应用的研究者。; 使用场景及目标:①解决各类时间序列预测问题,如能源出力预测、电力负荷预测、环境数据预测等;②学习如何将CNN-LSTM模型与贝叶斯优化相结合,提升模型性能;③掌握Matlab环境下深度学习模型搭建与超参数自动优化的技术路线。; 阅读建议:建议读者结合提供的Matlab代码进行实践操作,重点关注贝叶斯优化模块与混合神经网络结构的设计逻辑,通过调整数据集和参数加深对模型工作机制的理解,同时可将其框架迁移至其他预测场景中验证效果。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值