Spring框架
优点
◆JAVA EE应该更加容易使用。
◆面向对象的设计比任何实现技术(比如JAVA EE)都重要。
◆面向接口编程,而不是针对类编程。Spring将使用接口的复杂度降低到零。(面向接口编程有哪些复杂度?)
◆代码应该易于测试。Spring框架会帮助你,使代码的测试更加简单。
◆JavaBean提供了应用程序配置的最好方法。
◆在Java中,已检查异常(Checked exception)被过度使用。框架不应该迫使你捕获不能恢复的异常。
简介
Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。
Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
轻量——从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。
控制反转——Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。
面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务(transaction)管理)进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。
容器——Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建——基于一个可配置原型(prototype),你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例——以及它们是如何相互关联的。然而,Spring不应该被混同于传统的重量级的EJB容器,它们经常是庞大与笨重的,难以使用。
框架——Spring可以将简单的组件配置、组合成为复杂的应用。在Spring中,应用对象被声明式地组合,典型地是在一个XML文件里。Spring也提供了很多基础功能(事务管理、持久化框架集成等等),将应用逻辑的开发留给了你。
所有Spring的这些特征使你能够编写更干净、更可管理、并且更易于测试的代码。它们也为Spring中的各种模块提供了基础支持。
常用框架组合
1.SSH(Spring+Struts+Hibernate)
2.SSM(Spring +SpringMVC +Mybatis)+Gradle
3.Spring boot +Spring cloud +Maven
各框架特点和对比
在SpringBoot出现之前,我们常说的三大框架是 Spring、SpringMVC、Mybatis(SSM),而在SpringBoot出现之后,SpringBoot慢慢开始占据了主流地位,另外在SSM之前还有一个业内流行的SSH框架。
一、什么是SSH?
Struts、Spring和Hibernate ,简称SSH。在10多年前,SSH绝对是业内最流行的企业级开发框架。SSH框架是以Struts框架进行MVC分离、控制业务跳转,同时使用Hibernate进行持久化,最后配合Spring的统一管理进行实现的开发框架。相对于传统的J2EE开发框架来讲性能相对较高、资源消耗相对较少。具体优势如下:框架进行了代码分层,将Java代码和HTML代码进行分层,大大降低了开发人员的技术难度,不需要同时精通Java后端知识和Web前端知识。由于使用了Struts框架进行了MVC分离,降低了各层代码间的耦合度。与Spring的AOP机制相互独立,互不影响。使用SSH框架开发项目,能够大大提高项目的开发效率与开发质量。良好的扩展性和维护性。
二、什么是SSM?
SSM框架是Spring+SpringMVC+MyBatis三个框架整合而成的,其实SpringMVC属于Spring框架,所以SSM框架其实就是Spring和Mybatis两个框架的整合运用。那SSM框架的优势又有哪一些呢?对于MVC模式的实现,SpringMvc更加的轻量。由于SpringMvc本身属于Spring,因此与Spring的配合使用契合度更高。Mybatis相对Hibernate更加轻量,同时将Sql和业务代码进行了很好的解耦。MyBatis的学习门槛更低,相对于传统的JDBC差距不大,更好入门及掌握。
三、SSH框架和SSM框架的区别
两个框架的主要区别在于两点。第一,MVC分离的实现方式中前者为Struts,后者为SpringMVC;第二,持久层的框架前者为Hibernate,后者为MyBatis,所以这两个框架几乎所有的不同都是由这两点产生的。
四、Struts对比SpringMVC
由于SpringMVC针对方法进行设计,而Struts针对类进行设计,相对来讲SpringMVC的速度相对更快。SpringMVC配置更加简单,可以说完全0配置,开发效率更高。SpringMVC的学习门槛更低,使用更简单。SpringMVC扩展性更强,更灵活。
五、Hibernate对比MyBatis
MyBatis更加轻量,学习门槛更低,但相对功能全面性来讲Hibernate更好。如果你的项目中仅仅使用简单的增删改查功能,选用Hibernate会让你节省不少的开发时间。反之如果需要使用到较多的sql复杂语句,则选用MyBatis更加灵活。MyBatis默认的SQL查询性能更高,而Hibernate会进行所有字段查询,性能就相对较低了。Hibernate有自己的日志统计功能,而MyBatis需要使用Log4j实现。MyBatis缓存特性相对Hibernate更高。
52 类 110 个常用的组件和框架!!!以下排序是按照从技术组件到开发框架到代码工具:
WEB 容器
Tomcat
https://tomcat.apache.org/
Jetty
https://www.jetty.com/
JBoss
https://www.jboss.org/
Resin
https://caucho.com/products/resin
数据库
H2
https://h2database.com/
SQLite
https://www.sqlite.org/
MySQL
https://www.mysql.com/
Oracle
https://www.oracle.com/index.html
SQL Server
https://www.microsoft.com/en-us/sql-server/sql-server-downloads
PostgreSQL
https://www.postgresql.org/
MariaDB
https://mariadb.org/
缓存
Redis
https://redis.io/
Memcached
ttps://memcached.org/
消息队列
Kafka
https://kafka.apache.org/
RocketMQ
https://rocketmq.apache.org/
Pulsar
https://pulsar.apache.org/
RabbitMQ
https://www.rabbitmq.com/
负载均衡
LVS
http://www.linuxvirtualserver.org/
NGINX
https://www.nginx.com/
分布式存储
Ceph
https://docs.ceph.com/
HDFS
https://hadoop.apache.org/docs/r1.2.1/hdfs_design.html
数据库集群
MHA
https://github.com/yoshinorim/mha4mysql-manager
分布式协调
ZooKeeper
https://zookeeper.apache.org/
大数据相关
Storm
https://storm.apache.org/
Flink
https://flink.apache.org/
Spark
https://spark.apache.org/
HBase
https://hbase.apache.org/
ClickHouse
https://clickhouse.com/
Doris
https://doris.apache.org/
日志收集与分析
Filebeat
https://www.elastic.co/beats/filebeat
Logstash
https://www.elastic.co/logstash/
Kibana
https://www.elastic.co/kibana
搜索
Elasticsearch
https://www.elastic.co/
系统监控
SkyWalking
https://skywalking.apache.org/
zipkin
https://zipkin.io/
分库分表
ShardingSphere
https://shardingsphere.apache.org/
Mycat2
http://mycatone.top/
微服务
Spring Cloud
https://spring.io/projects/spring-cloud
RPC 框架
Dubbo
https://github.com/apache/dubbo
gRPC
https://github.com/grpc/grpc-java
网络框架
Netty
https://netty.io/
MVC 框架
Spring Framework
https://spring.io/projects/spring-framework
Spring Boot
https://spring.io/projects/spring-boot
数据层框架
MyBatis
https://github.com/mybatis/mybatis-3
MyBatis-Plus
https://github.com/baomidou/mybatis-plus
Hibernate
http://hibernate.org/orm/
数据库连接池
HikariCP
https://github.com/brettwooldridge/HikariCP
Druid
https://github.com/alibaba/druid
Redis 客户端
Jedis
https://github.com/xetorthio/jedis
Redisson
https://github.com/redisson/redisson
Rest 接口设计与开发
Swagger
https://swagger.io/
数据参数校验
Hibernate Validator
https://hibernate.org/validator/
安全相关
Shiro
https://shiro.apache.org/
Bouncy Castle
https://www.bouncycastle.org/java.html
jjwt
https://github.com/jwtk/jjwt
Reactive 编程
Akka
https://akka.io/
RxJava
https://github.com/ReactiveX/RxJava
vert.x
https://vertx.io/
单元测试
JUnit
https://junit.org/junit5/
测试辅助
JMockit
http://jmockit.github.io/
Mockito
https://github.com/mockito/mockito
JMeter
http://jmeter.apache.org/
Selenium
https://www.selenium.dev/
日志记录
Log4j2
https://logging.apache.org/log4j/
Logback
http://logback.qos.ch/
SLF4J
http://www.slf4j.org/
代码质量检查
Checkstyle
https://github.com/checkstyle/checkstyle
Spotbugs
https://github.com/spotbugs/spotbugs
代码生成
Lombok
https://projectlombok.org/
领域语言定制
ANTLR
https://www.antlr.org/
配置文件解析
config
https://github.com/lightbend/config
序列化格式
Avro
https://avro.apache.org/
Thrift
https://thrift.apache.org/
Protobuf
https://github.com/protocolbuffers/protobuf
模板引擎
Freemarker
https://freemarker.apache.org/
Thymeleaf
https://www.thymeleaf.org/
Office 文档处理
POI
https://poi.apache.org/
PDF 处理
iText
https://itextpdf.com/en
Apache PDFBox
https://pdfbox.apache.org/
高性能队列
Disruptor
https://lmax-exchange.github.io/disruptor/
HTTP 客户端
Async Http Client
https://github.com/AsyncHttpClient/async-http-client
Feign
https://github.com/OpenFeign/feign
Retrofit
https://square.github.io/retrofit/
二维码解析
ZXing
https://github.com/zxing/zxing
定时任务调度
Quartz
https://github.com/quartz-scheduler/quartz
JSON 解析
Gson
https://github.com/google/gson
Jackson
https://github.com/FasterXML/jackson
fastjson
https://github.com/alibaba/fastjson
分布式事务
Seata
https://github.com/seata/seata
属性映射
MapStruct
https://github.com/mapstruct/mapstruct
本地缓存
Ehcache
http://www.ehcache.org/
Caffeine
https://github.com/ben-manes/caffeine
系统排错与调优
JMH
http://openjdk.java.net/projects/code-tools/jmh/
Arthas
https://github.com/alibaba/arthas
命令行参数解析
JCommander
http://jcommander.org/
计算机视觉
JavaCV
https://github.com/bytedeco/javacv
工具集合
Guava
https://github.com/google/guava
Hutool
https://hutool.cn/
构建工具
Maven
https://maven.apache.org/
Gradle
https://gradle.org/
Bazel
https://bazel.build/
本地系统开发
JNA
https://github.com/java-native-access/jna
JVM
Adopt Open JDK
https://adoptopenjdk.net/
Graal
https://github.com/oracle/graal
Open JDK
https://openjdk.java.net/
多版本 Java 支持
jenv
https://github.com/jenv/jenv
爬虫相关
Nutch
https://nutch.apache.org/
Crawler4j
https://github.com/yasserg/crawler4j
jsoup
https://jsoup.org/
webmagic
https://github.com/code4craft/w