Spring简介
Spring是分层的全栈经良机开源框架,以IOC(控制反转/反转控制)和AOP(面向切面编程)为核心,Spring本质是管理软件中的对象,创建对象和维护对象之间的关系.
Spring优势
1)方便解耦,简化开发
通过IOC控制反转可以将对象的依赖关系交由Spring进行控制,避免造成过度耦合
2)AOP编程
面向切面编程,在不影响原有程序的基础上增加新功能
3)声明式事务管理
可以通过声明式方式灵活的进行事务管理
4)方便测试
可以用非容器依赖的编程方式进行几乎所有的测试工作
Spring架构
- 核心容器Spring Core :核心容器主要组件是BeanFactory,工厂模式的实现BeanFactory 使用控制反转(IOC)模式,将应用程序的配置和依赖性规范与实际的应用程序代码分开。
- SpringContext :Spring上下文,是一个配置文件,向Spring框架提供上下文信息
- SpringAOP : SpringAOP磨矿直接将面向切面编程的功能集成到了Spring框架中,通过使用SpringAOP可以将声明性事务管理继承到应用程序中
- SpringDAO JDBCDAO抽象层用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量
Spring IOC控制反转
IOC控制反转,吧对象的穿件权利交给框架,即对象的创建 存储 管理都交给Spring容器(Spring容器可以理解为一个map集合)
IOC入门
1.创建maven工程引入Spring依赖
<dependencies>
<!-- 添加junit的jar包 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency>
<!-- 添加spring的jar包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.1.3.RELEASE</version>
</dependency>
</dependencies>
2.创建Spring配置文件applicationContext.xml(src/main/resource)
<?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">
</beans>
- Service接口和实现类以及Dao接口的对象交给Spring容器创建管理
通过
<?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">
<!-- 将EmpService接口的实现类的实例交给spring创建 -->
<bean id="Service" class="com.tedu.service.ServiceImpl"></bean>
<!-- 将EmpDao接口的实现类的实例交给spring创建 -->
<bean id="Dao" class="com.tedu.dao.DaoImpl"></bean>
</beans>
4.获取对象
- 获取Spring核心容器对象
- 通过Spring容器核心对象获取容器内的对象
//获取spring的核心容器对象
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
//通过spring的核心容器获取EmpService接口的子类实例
EmpService service = (EmpService) ac.getBean("empService");
EmpDao dao = (EmpDao) ac.getBean("empDao");
System.out.println( service );
System.out.println( dao );
IOC小结
由原本的注解new对象编程由Spring初始化的xml配置文件来创建,也就是有Spring容器创建,当Spring运行时会加载整个xml核心配置文件,读取到bean,会利用反射机制创建该类的对象
Bean对象的单例和多例
Spring容器中管理的Bean对象的作用域,可以通过scope属性或相关注解配置,最常用时singleton(单例)和peototype(多例)
1) singleton:单实例,是默认值。这个作用域标识的对象具备全局唯一性。
当作用域为Singleton时整个Spring容器中只会创建当前类的唯一一个对象
这个对象会被存储到单例缓存中,并且对该Bean的后续引用都将会返回被缓存的惟一的这个对象实例singleton负责对象的创建,销毁
2) prototype:多实例。这个作用域标识的对象每次获取都会创建新的对象
单例:
<bean id="user" scope="singleton" class="com.tedu.spring.User"></bean>
多例:
<bean id="user" scope="prototype" class="com.tedu.spring.User"></bean>