Spring

Spring概述

Spring 是分层的 Java SE/EE 应用 全栈式(full-stack)轻量级开源框架,以 IoC(Inverse Of Control: 控制反转)和 AOP(Aspect Oriented Programming:面向切面编程)为内核,提供了表现层 Spring MVC 和持久层 Spring JDBC 以及业务层事务管理等众多的企业级应用技术,还能整合开源世界众多 著名的第三方框架和类库,逐渐成为使用最多的 Java EE 企业应用开源框架。

Spring的发展历程

1997 年 IBM 提出了 EJB 的思想

Spring 诞生于2002,成型与2003,作者是Rod Johnson,他写了两本书

  • 《Expert One-to-One J2EE Desion and Development》
  • 《Expert One-to-One J2EE Development without EJB》(2004)

阐述了 J2EE 开发不使用 EJB 的解决方式(Spring 雏形)

2017年9月份发布了Spring的最新版本Spring 5.0通用版(GA) JDK版本要求1.8及以上

Spring的优势

  1. 方便解耦,简化开发
  2. 通过 Spring 提供的 IoC 容器,可以将对象间的依赖关系交由 Spring 进行控制,避免硬编码所造成的过度程序耦合。用户也不必再为单例模式类、属性文件解析等这些很底层的需求编写代码,可以更专注于上层的应用。
  3. AOP 编程的支持
  4. 通过 Spring 的 AOP 功能,方便进行面向切面的编程,许多不容易用传统OOP实现的功能可以通过 AOP 轻松应付。
  5. 声明式事务的支持
  6. 可以将我们从单调烦闷的事务管理代码中解脱出来,通过声明式方式灵活的进行事务的管理,提高开发效率和质量。
  7. 方便程序的测试
  8. 可以用非容器依赖的编程方式进行几乎所有的测试工作,测试不再是昂贵的操作,而是随手可做的事情。
  9. 方便集成各种优秀框架
  10. Spring 可以降低各种框架的使用难度,提供了对各种优秀框架(Struts、Hibernate、Hessian、Quartz等)的直接支持。
  11. 降低 JavaEE API 的使用难度
  12. Spring 对 JavaEE API(如 JDBC、JavaMail、远程调用等)进行了薄薄的封装层,使这些API的使用难度大为降低。
  13. Spring 源码是经典学习范例
  14. Spring 的源代码设计精妙、结构清晰、匠心独用,处处体现着大师对 Java 设计模式灵活运用以及对 Java 技术的高深造诣。它的源代码无意是 Java 技术的最佳实践的范例。

Spring的体系结构




关于spring的外国参考文献 spring论文参考文献_关于spring的外国参考文献


IoC的概念及作用

什么是程序的耦合

耦合性(Coupling),也叫耦合度,是对模块间关联程度的度量。

简单来说,耦合就是:程序间的依赖关系。它包括:

  • 类之间的依赖
  • 方法间的依赖

程序间的耦合不可能完全消除,只能降低程序间的依赖关系,这叫做解耦

解决程序耦合的思路

开发中要做到:编译期不依赖,运行时才依赖

比如:

  • 数据库驱动加载,我们一般都这么写:
Class.forName("com.mysql.jdbc.Driver"); //参数是字符串,利用反射加载的数据库驱动
  • 其实注册驱动可以这么写:
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
  • 为什么我们平常都按照上面的写呢?
  • 因为下面这句带了new关键字,如果数据库驱动文件不在了,程序在编译的时候就通过不了;而上面那句是按照字符串来的,就算数据库驱动文件不在,也可以通过编译,这就降低了程序间的耦合度。

工厂模式解耦

在我们普通的Servlet、Service、Dao三层架构中,表现层Servlet必须要new一个业务层Service的实现类,而业务层Service也必须要new一个持久层Dao的实现类;这就出现了耦合!解决办法是用工厂模式解耦!

控制反转(IOC)

控制反转是一种设计思想。

就是将你设计好的对象交给Spring控制new出来,而不是由你自己直接new,从而达到降低耦合的目的。所以叫做控制反转。

IOC的使用

准备spring的开发包

Spring官网:https://spring.io/

jar包下载地址:https://repo.spring.io/release/org/springframework/spring/

Spring项目入门

  1. 首先创建简单的Servlet、Service、Dao三层架构的接口以及其实现类。
  2. 创建Spring的配置文件(叫什么都行,一般叫applicationContext.xml),记得导入约束。(idea可以直接new一个自带约束的Spring Config.xml文件)
<?xml version="1.0" encoding="UTF-8"?>
  1. 获取Spring new的bean对象
package xyz.sky03.servlet;  import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import xyz.sky03.dao.IUserDao; import xyz.sky03.service.IUserService;  public class UserServlet { public static void main(String[] args){  //1.获取核心容器对象 ApplicationContext ac= new ClassPathXmlApplicationContext("bean.xml");  //2.根据id获取Bean对象 以下两种方式都可以 //这里没有返回指定类型,所以需要强转类型 IUserService service = (IUserService) ac.getBean("userService");  //这里第一个参数填配置文件中的id,因为参数里指定了class,所以可以直接得到对应的类型 IUserDao dao = ac.getBean("UserDao