Spring IoC(控制反转)【一】

需要使用的IoC对象

Spring中需要使用的IoC容器管理的bean都与实际应用的对象一一对应,但是并不是所有对象都需要在IoC中进行管理,

常见的需要使用IoC进行管理的对象有如下几种:


1、服务层对象

服务层对象封装了业务逻辑,用来实现应用中的业务逻辑,称为服务类,往往需要在IoC容器中进行管理。

2、数据访问对象

数据访问对象封装了数据访问逻辑,需要在IoC容器中进行管理。

3、表示层对象

某些表示层对象也常常需要在IoC容器中进行管理,例如Struts2框架中的Action类。

4、工厂类对象

某些工厂类对象常常需要使用IoC容器进行管理,例如Hibernate框架的SessionFactory工厂对象。

5、JMS的Queue、Topic对象

消息处理中的Queue以及Topic对象也常常需要在IoC容器中进行管理。


值得注意的是,并不是只有上述的对象可以使用IoC容器管理,任何对象都可以使用IoC管理。

然而,在实际JavaEE应用中,上述几种对象使用IoC管理的情况较多。


如何实例化bean

使用IoC容器管理bean,主要包括实例化bean以及装配bean两个方面。

装配bean之前,首先需要能够实例化bean才行。

在applicationContext.xml中指定IoC容器实例化bean对象的不同方法。


IoC容器通常有以下三种实例化bean的方法:

1、通过无参构造方法实例化

如果在配置文件中只使用id和class属性配置bean,则默认调用类的无参构造方法实例化

<bean id="customer" class="vo.Customer"></bean>
上述配置将调用Customer类的无参构造方法创建Customer实例。


2、通过静态工厂方法实例化

有些类中提供了静态工厂方法返回实例,假设Course类中有如下静态工厂方法:

public static Course createCourse(){
	System.out.println("invoke createCourse()");
	return new Course();
}
在配置文件中可以使用factory-method属性调用该静态工厂方法,创建Course实例,代码如下:

<bean id="course" class="vo.Course" factory-method="createCourse"></bean>

3、通过非静态工厂方法实例化

有些类中可能提供了非静态工厂方法返回实例,假设存在一个类CoureseFactory,其中提供了非静态的工厂方法以返回Course实例

public class CourseFactory{
	public Course createCourse(){
		System.out.println("invoke CourseFactory createCourse()");
		return new Course();
	}
}
通过下面的配置,可以调用CourseFactory的createCourse工厂方法创建Course实例:

<bean id="courseFactory" class="factory.CourseFactory" ></bean>
<bean id ="course" class ="vo.Course" factory-method="createCourse" factory-bean="courseFactory"></bean>
上述配置文件中,先实例化了工厂类CourseFactory的实例courseFactory,然后通过factory-bean指定使用该工厂bean,并通过factory-method指定使用工厂方法createCourse实例化Course的实例。


setter注入和构造器注入

对象实例化后,往往需要对其依赖的属性进行赋值,称为依赖注入。

Spring中主要有两种注入方法,即setter注入和构造器注入。


setter注入:

例Course类中存在如下setter方法:

public void setId(){
	this.id=id;
}
在配置文件的bean元素下,可以使用property元素指定属性名,进而调用对应的setter方法注入具体值

<bean id="course" class="vo.Course">
	<property name="id">
		<value>1</value>
	</property>
</bean>
上述配置信息中,property的name属性值必须与setter方法名对应,规则与JavaBean相同,即property的name值是对应的setXXX方法名的set后的单词,且首字母必须小写。

属性值使用<value>元素指定,通过<value>元素指定的都是内置类型的值,如Integer、double、String等类型,

例如上述配置中<value>1</value>将把值作为实际参数传给setId方法对属性赋值。


构造方法注入:

例Course类中有如下构造方法:

public Course(Integer id,String title,double price){
	super();
	this.id=id;
	this.title=title;
	this.price=price;
}
配置文件中可以通过如下配置,使用上述构造方法对Course实例注入属性:

<bean id="course" class="vo.Course">
	<constructor-arg index="0">
		<value>4</value>
	</constructor-arg>
	<constructor-arg index="1">
		<value>Java</value>
	</constructor-arg>
	<constructor-arg index="2">
		<value>1000</value>
	</constructor-arg>
</bean>

上述配置信息中,<constructor-arg>表示构造方法的参数,index表示构造方法中参数的索引值,例如<constructor-arg index="0">表示构造方法的第一个参数。

<value>元素用来指定构造方法的参数值,和<property>的子元素<value>一样,只能用来赋值内置类型的值。


在实际应用开发中,使用setter方式注入的情况较多因为构造方法注入的方式容易产生混淆和歧义。








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
代码下载:完整代码,可直接运行 ;运行版本:2022a或2019b或2014a;若运行有问题,可私信博主; **仿真咨询 1 各类智能优化算法改进及应用** 生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化 **2 机器学习和深度学习方面** 卷积神经网络(CNN)、LSTM、支持向量机(SVM)、最小二乘支持向量机(LSSVM)、极限学习机(ELM)、核极限学习机(KELM)、BP、RBF、宽度学习、DBN、RF、RBF、DELM、XGBOOST、TCN实现风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断 **3 图像处理方面** 图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知 **4 路径规划方面** 旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、车辆协同无人机路径规划、天线线性阵列分布优化、车间布局优化 **5 无人机应用方面** 无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配 **6 无线传感器定位及布局方面** 传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化 **7 信号处理方面** 信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化 **8 电力系统方面** 微电网优化、无功优化、配电网重构、储能配置 **9 元胞自动机方面** 交通流 人群疏散 病毒扩散 晶体生长 **10 雷达方面** 卡尔曼滤波跟踪、航迹关联、航迹融合

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值