结合老师上课所讲的和查询的资料,列出了一些重点和自己的理解,便于自己记住。如有错误请各位大佬多多指正,十分需要大家的指正,谢谢了。这位博主写的文章,讲的很好,我这个小菜鸡都听懂了。

1.什么是spring?

spring是一个轻量级框架(一个大型容器),用来管理协调各层之间的调用。

注:轻量级框架不是说代码量少,而是spring是非侵入式的框架,基于spring开发的应用程序并不需要我们去实现或继承任何接口或类

2.spring的核心是IoC(Inversion of Control)(控制反转)和DI(Dependency Injection)(依赖注入)

IOC(控制反转):对象创建由开发人员自己创建和维护反转成对象的创建交给程序本身。

DI(依赖注入):spring这个容器中,替你管理着一系列的类,前提是你需要将这些类交给spring容器进行管理,然后在你需要的时候,不是自己去定义,而是直接向spring容器索取,当spring容器知道你的需求之后,就会去它所管理的组件中进行查找,然后直接给你所需要的组件.(这里的IOC和DI的概念就是上面那位博主讲的)

通过我的代码案例理解一下。

首先创建一个实体类ClassInfo

Spring Vault 干啥用的 spring什么_实体类

 以前我们想创建一个ClassInfo对象是不是要通过new出来的。如下面

Spring Vault 干啥用的 spring什么_spring_02

这样虽然可以new出一个ClassInfo对象,但是项目上传后的维护是不是变得复杂了

IOC和ID就解决了维护变得复杂的这个问题。还是结合代码看看。

Spring Vault 干啥用的 spring什么_实体类_03

测试类如下:

Spring Vault 干啥用的 spring什么_ci_04

这样和上面直接new对象的效果是一样的,但它解决了直接new所产生的不足之处。

3.DI的几种方式

①属性注入

即通过property

<bean id="classInfo" class="com.yc.spring.bean.ClassInfo">
         <!-- 赋初值 -->
         <property name="cid" value="1001"></property>
         <property name="cname" value="源辰C111班"></property>
     </bean>②构造注入(记得在实体类中要写构造函数哦)
即通过constructor-arg(可以通过字段名或字段索引为属性赋值)
<bean id="classInfo1" class="com.yc.spring.bean.ClassInfo">
         <constructor-arg name="cname" value="源辰c102班"></constructor-arg>
         <constructor-arg name="cid" value="1002"></constructor-arg>    
     </bean>特殊情况:当有两个或两个以上名字相同类型不同的参数时,使用type区分开来
<bean id="classInfo2" class="com.yc.spring.bean.ClassInfo">
         <constructor-arg index="1" value="源辰c123班"></constructor-arg>
         <constructor-arg index="0" value="103" type="Integer"></constructor-arg>    
     </bean>

③特殊情况

类外一个实体类StuInfo

Spring Vault 干啥用的 spring什么_spring_05

 1.当两个实体类有关联的时候怎样注值?通过ref,下面几种书写方式都是可以的。

①
 <bean id="stuInfo" class="com.yc.spring.bean.StuInfo">
         <!-- 赋初值 -->
         <property name="sid" value="1001"></property>
         <property name="sname" value="源辰"></property>
         <property name="tel" value="17872106189"></property>
          <property name="age" value="18"></property>
          <property name="cf" ref="classInfo"></property>       
     </bean>②
<bean id="stuInfo1" class="com.yc.spring.bean.StuInfo">
         <property name="sid" value="1001"></property>
         <property name="sname" value="源辰c111班"></property>
         <property name="tel" value="15096098888"></property>
         <property name="age" value="18"></property>
         <property name="cf">
         <ref bean="classInfo1"/>
         </property>    
     </bean>③
 <bean id="stuInfo3" class="com.yc.spring.bean.StuInfo">
         <property name="sid" value="1001"></property>
         <property name="sname" value="张三"> </property>
         <property name="tel" value="15096098888"></property>
         <property name="age" value="18"></property>
         <property name="cf">
         <bean class="com.yc.spring.bean.ClassInfo">
         <property name="cid" value="2001"></property>
         <property name="cname" value="源辰c211班"></property>
         </bean>
         </property>    
     </bean>2.特殊符号怎样注值进去
通过![CDATA[]],下面是想把<张三>这样是特殊字符注入进去的。
<bean id="stuInfo2" class="com.yc.spring.bean.StuInfo">
         <property name="sid" value="1001"></property>
         <property name="sname" >
         <value><![CDATA[<张三>]]></value>
         </property>
         <property name="tel" value="15096098888"></property>
         <property name="age" value="18"></property>
         <property name="cf">
         <ref bean="classInfo1"/>
         </property>    
     </bean>3.注入控制怎样解决
<!-- 空值 -->
     <bean id="stuInfo4" class="com.yc.spring.bean.StuInfo">
         <constructor-arg name="sid" value="1002"></constructor-arg>
         <constructor-arg name="sname" >
         <value><![CDATA[<张三>]]></value>
         </constructor-arg>
         <constructor-arg name="tel" value="15096098888"></constructor-arg>
         <constructor-arg name="age" value="18"></constructor-arg>
         <constructor-arg name="cf">
         <null/>
         </constructor-arg>    
     </bean>4.级联属性
<!-- 级联属性 -->
     <bean id="stuInfo5" class="com.yc.spring.bean.StuInfo">
         <property name="sid" value="1001"></property>
         <property name="sname" value="源辰"></property>
         <property name="tel" value="15096098888"></property>
         <property name="age" value="18"></property>
         <property name="cf" ref="classInfo1"></property><!--必须先有这个对象哦-->
         <property name="cf.cname" value="abc"></property>     
     </bean>5.list或map怎么注值进去
<bean id="collections" class="com.yc.spring.bean.Collections">
         <property name="list">
             <list>
                 <value>a</value>
                 <value>b</value>
                 <value>c</value>
             </list>
         </property>
         <property name="map">
             <map>
                 <entry key="age" value="18"></entry>
                 <entry key="name" value="李四"></entry>
             </map>
         </property>
         <property name="stuInfos">
             <list>
                 <ref bean="stuInfo1" />
                 <ref bean="stuInfo2" />
             </list>
         </property>
     </bean>