一、Spring介绍
1、Spring是什么?
Spring是一个轻量级的JAVAEE应用开源框架
2、Spring的好处(为什么要使用spring)?
IOC:控制反转
AOP:面向切面
粘合剂:整合第三方的技术和框架
二、IOC
1、耦合
耦合:对象之间的依赖关系(service依赖于dao),耦合度越高维护的成本就越高
产生耦合的原因:硬编码
2、IOC
IOC(Inverse of Control)控制反转:控制对象的创建;正传是自己new对象,反转是由工厂创建对象;
3、自定义工厂的IOC解决程序耦合
①把service和dao配置到bean.properties
②读取bean.properties-->Properties(HashMap)
③通过反射创建对象,并装到Map(ioc容器)中
④使用对象时直接从Map中获取
4、spring的IOC解决程序耦合
①pom.xml
spring-context
②applicationContext.xml
<bean id="userDao" class="com.jy.dao.UserDaoImpl"></bean>
<bean id="userService" class="com.jy.service.UserServiceImpl"></bean>
③测试
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
UserService userService = ac.getBean("userService", UserService.class);
userService.addUser();
三、DI
1、什么是DI?
DI(Dependency Injection)依赖注入:将依赖对象(dao)从容器中拿出来赋值给调用者(service)
2、DI的方式
1)构造方法注入
要求:类中必须提供构造方法
标签:<constructor-arg>
========给谁赋值=======
name:构造方法的参数名
index:构造方法参数的索引位置
========赋什么值=======
value:基本类型
ref:另一个bean标签的id值
<constructor-arg name="userDao" ref="userDao"></constructor-arg>
<constructor-arg index="2" value="2"></constructor-arg>
2)set方法注入
要求:类中必须提供set方法
标签:property
========给谁赋值=======
name:set方法的参数名
========赋什么值=======
value:基本类型
ref:另一个bean标签的id值
<property name="userDao" ref="userDao"></property>
<property name="age" value="18"></property>-->
3)自动注入
要求:类中必须提供set方法
原理:遍历map,并判断每个bean的类型,若类型匹配则注入
<bean autowire="byType">
四、BeanFactory和ApplicationContext
BeanFactory:顶级接口,使用对象时才创建
ApplicationContext:子接口,加载配置文件时就创建对象
五、spring bean五种作用域(bean放哪了)
singleton:单例,默认,ioc容器
prototype:多例,每次使用newInstance()
request:request域
session:session域
application:application域
单例和多例的使用场景?
单例:dao、service、sqlSessionFactory
多例:connection、sqlSession