web后端-spring介绍

参考资料

  • spring实战(第四版)
  • 精通Spring 4.x 企业应用开发实战

暂时没有感触的知识点会在学习开源项目后补上

为什么要用spring?

Spring 是分层的 Java SE/EE应用一站式的轻量级开源框架,以 IoC ( Inverse ofControl,控制反转)和AOP (Aspect Oriented Programming,切面编程)为内核,提供了展现层Spring MVC、持久层Spring JDBC 及业务层事务管理等一站式的企业级应用技术。此外,Spring 以海纳百川的胸怀整合了开源世界里众多著名的第三方框架和类库,逐渐成为使用最多的轻量级 Java EE企业应用开源框架。

简单来说就是可以使web开发更简便,同样的功能,用servlet写那叫一个痛苦。

spring的有啥好处?

方便解耦,简化开发。通过 Spring 提供的IoC容器,用户可以将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合。有了Spring,用户不必再为单实例模式类、属性文件解析等这些底层的需求编写代码,可以更专注于上层的应用。

Spring就是一个大工厂,可以将所有对象创建和依赖关系维护,交给Spring管理

AOP编程的支持。通过Spring 提供的 AOP功能,方便进行面向切面的编程,很多不容易用传统OOP实现的功能可以通过AOP轻松应对。

Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能。这个厉害了,用起来贼爽。

声明式事务的支持。在 Spring 中,用户可以从单调烦闷的事务管理代码中解脱出来,通过声明的方式灵活地进行事务管理,提高开发效率和质量。

简化开发。传统事务开发,存在大量冗余代码,感受一下。spring只需要通过配置就可以完成对事务的管理,而无需手动编程。

public void transactionTemplate() throws ClassNotFoundException, SQLException {
  Connection connection = null;
  Statement statement = null;
  ResultSet resultSet = null;
  try {
    // 获取数据库连接
    connection = JDBCUtil.getConnection();
    // 设置自动提交的模式为false
    connection.setAutoCommit(false);
    // 创建Statement对象 或 prepareStatement对象
    statement = connection.createStatement();
    statement.execute("sql 1");
    // ...
    statement.execute("sql n");
    //提交上面sql 1-sql n所有的SQL语句
    connection.commit();
  } catch (ClassNotFoundException e) {
    e.printStackTrace();
    throw e;
  } catch (SQLException e) {
    e.printStackTrace();
    //SQL执行异常,撤销此次事务中的所有SQL
    connection.rollback();
    throw e;
  } finally {
    // 如果此连接不释放的话,则将自动提交模式改回true
    connection.setAutoCommit(true);
    JDBCUtil.release(resultSet, statement, connection);
  }
}

方便程序的测试。可以用非容器依赖的编程方式进行几乎所有的测试工作。在Spring里,测试不再是昂贵的操作,而是随手可做的事情。

Spring对Junit4支持,可以通过注解方便的测试Spring程序.之前没做过测试,暂时没感觉

方便集成各种优秀框架。Spring不排斥各种优秀的开源框架,相反,Spring可以降低各种框架的使用难度。Spring 提供了对各种优秀框架(如Struts 、Hibernate、Hessian、Quartz 等)的直接支持。

简化开发

降低Java EE API的使用难度。Spring对很多难用的Java EE API (如JDBC、JavaMail、远程调用等)提供了一个薄层封装,通过Spring 的简易封装,这些Java EE API的使用难度大大降低。

Java源码是经典的学习范例。Spring 的源码设计精妙、结构清晰、匠心独运,处处体现着大师对Java设计模式的灵活运用及对Java技术的高深造诣。Spring框架源码无疑是Java技术的最佳实践范例。如果想在短时间内迅速提高自己的Java技术水平和应用开发水平,学习和研究Spring源码将会收到意想不到的效果。

简化开发

框架结构

 IOC

Spring核心模块实现了IoC的功能,它将类与类之间的依赖从代码中脱离出来,用配置的方式进行依赖关系描述,由IoC容器负责依赖类之间的创建、拼接、管理、获取等工作。BeanFactory 接口是Spring框架的核心接口,它实现了容器许多核心的功能。

就是不用new对象了,这个工作交给ioc容器做,用啥取啥,贼爽.

Context模块构建于核心模块之上,扩展了BeanFactory的功能,添加了i18n国际化、Bean生命周期控制、框架事件体系、资源加载透明化等多项功能。此外,该模块还提供了许多企业级服务的支持,如邮件服务、任务调度、JNDI 获取、EJB集成、远程访问等。ApplicationContext是 Context模块的核心接口。

暂时没感觉

表达式语言模块是统一表达式语言(Unified EL)的一个扩展,该表达式语言用于查询和管理运行期的对象,支持设置/获取对象属性,调用对象方法,操作数组、集合等。此外,该模块还提供了逻辑表达式运算、变量定义等功能,可以方便地通过表达式串和Spring loC容器进行交互。

暂时没感觉

AOP

AOP是继OOP之后,对编程设计思想影响极大的技术之一。AOP是进行横切逻辑编程的思想,它开拓了考虑问题的思路。在AOP模块里, Spring 提供了满足AOP Alliance规范的实现,还整合了AspectJ这种AOP语言级的框架。在Spring里实现AOP编程有众多选择。Java 5.0引入java.lang.instrument,允许在JVM启动时启用一个代理类,通过该代理类在运行期修改类的字节码,改变一个类的功能,从而实现AOP的功能。

当代码量较少时,加入新功能很简单,但随着代码的增多,在原有代码里加入新功能是个非常困难的事,总会产生各种问题。而且如果为多个模块加入同一个新功能,但是具有微小差距,会特别麻烦。你还在为了加入某个功能而去修改旧代码而苦恼吗?有了AOP,可以直接解决。

数据访问和集成

任何应用程序的核心问题是对数据的访问和操作。数据有多种表现形式,如数据表、XML、消息等,而每种数据形式又拥有不同的数据访问技术(如数据表的访问既可以直接通过JDBC,也可以通过Hibernate或MyBatis)。

首先,Spring站在 DAO的抽象层面,建立了一套面向DAO层的统一的异常体系,同时将各种访问数据的检查型异常转换为非检查型异常,为整合各种持久层框架提供基础。其次,Spring 通过模板化技术对各种数据访问技术进行了薄层封装将模式化的代码隐藏起来,使数据访问的程序得到大幅简化。这样,Spring就建立起了和数据形式及访问技术无关的统一的DAO层,借助AOP技术,Spring 提供了声明式事务的功能。

 没啥感觉

web远程访问

Spring自己提供了一个完整的类似于Struts的 MVC框架,称为Spring MVC。据说Spring 之所以也提供了一个MVC框架,是因为Rod Johnson想证明实现MVC其实是一项简单的工作。当然,如果你不希望使用Spring MVC,那么Spring对Struts、WebWork等MVC框架的整合,一定也可以给你带来方便。相对于Servlet 的 MVC,Spring在简化Portlet的开发上也做了很多工作,开发者可以从中受益。

mvc框架,比以前的基于servlet开发好用,简化开发,servlet写起来很痛苦,配一大堆东西,前端页面写的比较少,但是依然觉得麻烦

webSocket

WebSocket提供了一个在 Web应用中高效、双向的通信,需要考虑到客户端(浏览器)和服务器之间的高频和低时延消息交换。一般的应用场景有在线交易、游戏、协作、数据可视化等。

此外,Spring在远程访问及 Web Service 上提供了对很多著名框架的整合。由于Spring框架的扩展性,特别是随着Spring框架影响性的扩大,越来越多的框架主动支持Spring框架,使得Spring框架应用的涵盖面越来越宽广。

没啥感觉

spring4.0新特性

2013年4.0发布

全面支持java8.0

Spring.框架本身是由Java 8.0编译器编译的,编译时使用的是生成Java 6字节码的编译命令选项,因此可以使用Java 6.0、7.0或8.0来运行Spring 4.0的应用。

Java 8.0编译器编译过的代码需要在Java 8.0或以上的Java虚拟机上运行。由于在Spring框架中大量应用了反射机制和 Asm、Cglib等函数库,必须确保这些函数库能理解Java 8.0生成的新.class 文件。因此,Spring将 Asm、Cglib等函数库通过jarjar ( https://code.google.com/p/jarjar/)嵌入Spring框架中,这样Spring就可以同时支持Java 6.0、7.0和8.0的字节码而不会产生运行时错误。

简单来说就是以前只能理解java8之前的文件,现在升级了,可以理解之后的了

java8的lambada表达式

java8的日期与时间API

重复注解支持

Java 8.0增加了对重复注解的支持,Spring 4.0也同样支持。目前Spring 4.0仅支持对注解@Scheduled 和@PropertySource 的重复。例如,可以在一个类中使用多个@PropertySource注解来加载不同的资源配置文件,如代码清单1-2所示。

 没用过java8之前的,但是感觉这才对嘛

空指针终结者:Optimal<>

java.lang.NullPointerException是最常见也是最令人订庆的一种开帛,如一个对象可能为null,在调用其方法之前就必须进行非空检查,否则就会引发NullPointerException。但是,很多对象永远都不会为null,如果能把那些可能会为 null的对象明确标识出来,只对null嫌疑者进行判断,岂不是既可避免NullPointerException又可避免不必要的非空判断?Java 8.0的java.util.Optional就是为此而生的,它明确指示开发者哪些对象是需要非空检查的。

目前,Spring 4.0可在两种场合使用Java Optional。在代码清单1-3中,假设userDao不一定会被注入进来,原来必须使用@Autowired(required=false),但现在直接使用Optional即可。

这个没碰到过,没啥感觉

另一个使用Optional的地方是Spring MVC框架。例如,下面的代码表示userName参数是可选的,即请求参数可不包含userName。

这个一般前端会进行检查,正常情况下不会缺参数,暂时没感觉

核心容器增强

 Spring 4.0对核心容器进行了增强,支持泛型依赖注入,对GgLib类代理不再要求必须有空参构造器(这个特性带来很大便利);在基于Java的配置里添加了@Description;提供@Conditional注解来实现 Bean的条件过滤;提供@Lazy注解解决Bean延时依赖注入;支持 Bean被注入List或者Array时可以通过@Order注解或基于Ordered 接口进行排序。如果使用Spring 的注解支持,则可以使用自定义注解来组合多个注解,方便对外公开特定的属性。

暂时只能看懂一部分

 

这个好,节约空间

 

 又可以省一大部分工作

 

 字面意思,好用!

 支持用groovy定义bean

 web增强

从 Spring 4.0开始,Spring MVC基于Servlet 3.0开发,如需使用Spring MVC测试框架,则要依赖Servlet 3.0的相关.jar包(因为Mock 的对象都是基于Servlet 3.0的)。另外,为了方便REST 开发,引入新的@RestController控制器注解,这样就不需要在每个@RequestMapping方法上加@ResponseBody了。同时添加了一个AsyncRestTemplate,支持REST客户端的异步无阻塞请求。

暂时没感觉

支持websocket

Spring 4.0的一个最大更新是增加了对WebSocket的支持。WebSocket提供了一个在Web应用中高效、双向的通信,需要考虑到客户端(浏览器)和服务器之间的高频和低延时消息交换。一般的应用场景有在线交易、游戏、协作、数据可视化等。

使用WebSocket需要考虑浏览器版本(IE<10不支持),目前主流的浏览器都能很好地支持WebSocket。

暂时没感觉

测试的增强

Spring-test模块里的所有注解都可以用作meta-annotation,这样就可以自定义组合注解来减少测试时的重复配置。org.springframework.mock.web包与Servlet 3.0适配。

在Spring 4.0之前,需要通过继承AbstractTransactionalJUnit 4SpringContextTests类,然后调用executeSqlScript()函数来进行测试。这里存在一个问题:如果要同时执行多个数据源的初始化,则该方法并不可靠,而且使用起来也不是很便利。Spring 4.0提供了@Sql注解来完成这个任务。

没用过,不懂

posted @ 2022-05-28 21:59  EA2218764AB  阅读(206)  评论(0编辑  收藏  举报