Spring是什么?IOC和DI详细介绍。

Spring是什么

Spring是应用了很多优秀的设计模式,对于项目的实现,提供了优秀的解决方法;Spring是一个轻量级(低侵入)MVC和逻辑代码框架. 类与类之间的解耦合。
在这里插入图片描述

Spring就像盖几十层大楼的时候,提前准备好了一个非常非常完整的一个楼体框架,所有的结构,内部线路,水管,都已经设计好了,剩下的就是每个住户自己互不干扰的装修,这个Spring框架就是一个非常完整的体系结构,里面包含了对Dao的支持,对web的支持,对对象的控制,同时还应用了很多优秀的设计模式,对于项目的实现提供了优秀的解决方法,spring完成了所有的底层实现,剩下的只有一些业务逻辑。

IOC控制反转,大管家

IOC管理着所有的对象,不再由传统的new来获取自己需要的对象,现在所有的类都需要放在spring容器中,spring容器会自动创建对象,你只需要调自己想要的类就可以了,IOC最大的好处就是类与类之间的解耦合,使每个类之间的连接性降低。

比如电脑自带的硬盘是一个类,硬盘出现问题了,那么整个电脑就要拆开然后对硬盘进行维修,然后再重新组装,这样就很麻烦,所以代码中就出现了Spring中的IOC,它就相当于电脑上的USB接口,然后通过这个接口连接外部硬盘,这样硬盘出现问题就不用拆开电脑了,降低了它们的耦合性,同时电脑和外部硬盘的生成厂商也不用去关心别的了,他们只需要遵守usb接口这个原则就可以了,USB接口在代码中就充当着IOC的作用。

DI依赖注入

IOC调用某个类的时候给这个类注入需要的值,相当于电脑打开外部硬盘的时候,给硬盘中存入各种文件,外部硬盘就相当于一个类,给这个类注入需要的数据,先是通过IOC调用类,然后通过DI注入需要的数据,这是Spring代替传统new对象的一个完整流程。

一共有三种注入方式:

  1. 设值注入:底层通过set来实现值的注入,主要代码是,灵活性是最好的,通常在配置文件的时候运用。
<bean id= "product" class= "com.gxy.model.Product">
	<property name= "proId" value= "1"></ property>
	<property name= "proName" value= "华为"></property>
	<property name= "proBrief" value= "支持国产"></ property>
	<property name= "proPrice" value= "2999"></property>
	<property name= "proCount" value= "10"></ property>
	<property name= "phone" ref= "phone "></property>
</bean>
<bean id= "phone" class= "com.gxy.model.Phone ">
	<property name= "phoneId" value= "1 "></property>
	<property name= "phoneName”value= "华为P30"></property>
</bean>

  1. 构造注入:底层通过构造方法来实现值的注入,主要代码是,灵活性一般,通常在没有set方法的源代码文件中使用。
<bean id="product1" class= "com. gxy. model. Product ">
	<constructor-arg>
		<value>1</value>
	</constructor-arg>
	<constructor-arg>
		<value>华为</value>
	</constructor-arg>
	<constructor-arg>
		<value>支持国产</value>
	</constructor-arg>
	<constructor-arg>
		<value> 2999</value>
	</constructor-arg>
	<constructor-arg>
		<value>10</value>
	</constructor-arg>
</bean>

  1. 自动装配:底层通过set来实现值的注入,主要代码是autowire,灵活性一般,通常应用在MVC当中。
<bean id= "product" class="com.gxy.model.Product" autowire= "byType">
	<property name= "proId" value= "1"></property>
	<property name= "proName”value="华为"></property>
	<property name= "proBrief" value="支持国产"></property>
	<property name= "proPrice" value= "2999"></property>
	<property name= "proCount" value= "10"></property>
</bean>| 
<bean class="com.gxy.model.Phone">
	<property name= "phoneId" value="1 "></property>
	<property name= "phoneName”value="华为P30"></property>
</bean>

没有最好的方式,只有最合适的方式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值