一、Spring的作用、特点、主要学习部分
Spring可以解决业务逻辑层和其他各层的耦合问题,也是一个框架的粘合剂,它让面向接口编程思想贯穿了整个系统。
特点:高内聚,低耦合,设计层框架
主要学习spring的以下部分:①IOC思想 ②AOP编程 ③声明式事务的支持 ④框架无缝整合其他框架
二、常见模块
20多个子模块,模块按组7大块,核心容器、数据访问/集成,Web、AOP(面向切面编程)、设备、消息和测试
三、IOC是什么?
控制反转,调用者的实例创建不再由调用者自己创建,而是由spring容器创建,这个过程把实例创建的控制权由应用代码转移到了外部容器,控制权发生了改变。
四、DI是什么?
依赖注入,给对象赋属性值,一定要保留空的构造方法和get/set的方法
五、Bean标签里四个属性的作用
1.name属性:给对象取名字,名字可以同时趣多个,但是不同的对象不能重复
2.Scope对象作用域属性:①scope=“singleton” 默认值,Spring容器默认创建的对象是单列 ②scope=“prototype”创建的对象是多例(每次使用对象的时候额外创建一个新的) ③scope=“session”表示在一次会划范围内,Spring容器中的对象保持一个,公用一个 ④scope=“request”表示在一次请求范围内,Spring容器中的对象保存一个,公用同一个 注意:后两个只能用在web项目里
3.对象懒创建(只有在scope=“singleton”才会生效):lazy-init表示对象的加载时机(true:懒加载(使用对象的时候才创建);false(spring框架一启动就加载))
4.对象创建完成后调用的方法,和对象销毁后调用的方法:init-method="对象创建完成后调用的方法" ,destroy-method="对象销毁后调用的方法"
六、Spring创建对象的四种方法
1.用无参构造方法创建
<bean id="p1" name="person1,person2" class="com.swjd.bean.Person" scope="singleton" lazy-init="false" init-method="init" destroy-method="destroy"> <property name="id" value="857"/> <property name="name" value="貂蝉"/> <property name="sex" value="女"/> </bean>
2.用带参的构造方法创建对象
<bean id="p3" class="com.swjd.bean.Person"> <constructor-arg index="0" type="int" value="859"/> <constructor-arg index="1" type="java.lang.String" value="艾辰"/> <constructor-arg index="2" type="java.lang.String" value="男"/> </bean>
3.用静态工厂创建对象
<bean id="p4" class="com.swjd.beanfactory.PersonFactory" factory-method="createPerson"/>
4.用非静态工厂创建对象
<bean id="factory" class="com.swjd.beanfactory.NoStaticPersonFactory"/> <bean id="p5" factory-bean="factory" factory-method="createPerson"/>
七、Spring依赖注入的4种方式
1.调用set方法注入
<bean id="m1" class="com.swjd.bean.Man"> <!--方式一:通过set进行注入--> <property name="id" value="1"/> <property name="name" value="刘德华"/> <property name="hobby" value="唱歌"/> <!--注入对象--> <!--<property name="dog" ref="d1"/>--> <property name="dog"> <ref bean="d1"/> </property> </bean>
2.调用带参构的造方法注入
<bean id="m2" class="com.swjd.bean.Man"> <!--方式二:通过有参构造方法进行注入--> <constructor-arg index="0" type="int" value="2"/> <constructor-arg index="1" type="java.lang.String" value="蔡徐坤"/> <constructor-arg index="2" type="java.lang.String" value="rap"/> <constructor-arg index="3" type="com.swjd.bean.Dog" ref="d1"/> </bean>
3.P命名空间注入(本质依旧是set注入,语法简介一点)
<bean id="m3" class="com.swjd.bean.Man" p:name="王琳凯" p:hobby="唱歌" p:dog-ref="d1"/>
4.Spel表达式注入
<bean id="m4" class="com.swjd.bean.Man"> <property name="id" value="#{m1.id}"/> <property name="name" value="#{m2.name}"/> <property name="hobby" value="#{m3.hobby}"/> </bean>
八、复杂类型的注入
1.注入对象
2.注入数组
<property name="hobbies"> <array> <value>学习</value> <value>豪车</value> </array> </property>
3.注入集合
List:
<property name="subject"> <list> <value>Spring</value> <value>MyBatis</value> </list> </property> Set: <property name="friends"> <set> <value>小鬼</value> <value>小毛驴</value> </set> </property>
4.注入Map
<property name="map"> <map> <entry key="CN" value="中国"/> <entry key="RU" value="俄罗斯"/> <entry key="US" value="美国"/> </map> </property>