Spring 的简介
Jar包和源码的下载地址
https://github.com/spring-projects/spring-framework/tags
https://repo.spring.io/libs-release-local/org/springframework/spring/
Spring 学习的核心内容
[1] IOC:控制反转–帮助我们创建对象的
[2] AOP:面向切面—提升代码的扩展性
[3] TX:声明式事务管理
Spring 中IOC的实现
A、责任链
我们在使用MVC进行开发的时候数据在各层之间进行传递,数据传递的时候在业务上形成一个链条,这个链条称之为责任链
B、基于责任链模式开发的缺点:
层和层之间的相互调用造成了耦合性比较高
C、解决的方案
Spring IOC :控制反转
英文全称:Inversion of Control
作用 :帮助我们创建对象的
理解示意图
D、代码的实现
[1] 导包
[2] 书写applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--User user =new User();-->
<bean id="us" class="com.bjsxt.spring01.User"></bean>
</beans>
[3] 测试类代码
//[1]解析applicationContext.xml
ApplicationContext app =new ClassPathXmlApplicationContext("applicationContext.xml") ;
//[2]获得user对象
User us = (User) app.getBean("us");
us.eat();
IOC实现的好处
实现代码之间的解耦
IOC :控制反转
控制:创建对象的过程
反转:创建对象的操作本身是程序员自己完成的,现在反交给Spring 进行创建。
IOC 创建对象的方式
A、使用无参构造
<!--[1]使用无参构造创建对象-->
<bean id="stu" class="com.test.spring02.Student"></bean>
B、使用有参构造
<!--[2]使用有参构造
A、name属性和对应类中的有参构造的形参名称一致
B、书写constructor-arg 标签的顺序和有参构造的形参的顺序无关
C、我们可以使用 name 、index 和 type 共同约束我们调用的方法
-->
<bean id="stu2" class="com.test.spring02.Student">
<!--<constructor-arg name="age" value="18"></constructor-arg>
<constructor-arg name="sex" value="男"></constructor-arg>
<constructor-arg name="name" value="zs"></constructor-arg>-->
<constructor-arg name="a" index="0" type="int" value="12"></constructor-arg>
<constructor-arg name="b" index="1" type="java.lang.String" value="sxt"></constructor-arg>
</bean>
C、使用工厂模式创建对象
设计模式:解决某一类问题的产生
工厂设计模式:可以达到对象的统一管理,可以批量的产生某一类对象。
<!--[3]工厂模式-->
<!-- Factory factory=new Factory()-->
<bean id="factory" class="com.test.spring03.Factory"></bean>
<!-- People po= factory.getInstance('tea')-->
<bean id="po" factory-bean="factory" factory-method="getInstance">
<constructor-arg name="param" value="stu"></constructor-arg>
</bean>
<!--People tea = Factory.getInstance2("tea");-->
<bean id="po2" class="com.test.spring03.Factory" factory-method="getInstance2">
<constructor-arg name="param" value="stu"></constructor-arg>
</bean>