Spring概念:
Spring在不同的背景下意味着不同的东西。它可以用来引用Spring Framework项目本身,它就是一切开始的地方。随着时间的推移,其他Spring项目已经构建在Spring Framework之上。大多数情况下,当人们说“春天”时,他们就意味着整个项目家族。本参考文档侧重于基础:Spring Framework本身。
Spring框架分为几个模块。应用程序可以选择所需的模块。核心是核心容器的模块,包括配置模型和依赖注入机制。除此之外,Spring Framework还为不同的应用程序体系结构提供了基础支持,包括消息传递,事务数据和持久性以及Web。它还包括基于Servlet的Spring MVC Web框架,以及Spring WebFlux响应式Web框架。
关于模块的说明:Spring的框架jar允许部署到JDK 9的模块路径(“Jigsaw”)。为了在支持Jigsaw的应用程序中使用,Spring Framework 5 jar带有“Automatic-Module-Name”清单条目,它们定义了独立于jar工件的稳定语言级模块名称(“spring.core”,“spring.context”等)名称(罐子使用相同的命名模式,而不是“。”,例如“spring-core”和“spring-context”)。当然,Spring的框架jar在JDK 8和9+上的类路径上都能正常工作。
Spring的历史和Spring框架:
Spring于2003年成立,是对早期J2EE规范复杂性的回应 。虽然有些人认为Java EE和Spring处于竞争中,但Spring实际上是对Java EE的补充。Spring编程模型不包含Java EE平台规范; 相反,它集成了EE保护伞中精心挑选的个别规格:
-
Servlet API
-
WebSocket API
-
并发实用程序
-
JSON绑定API
-
Bean验证
-
JPA
-
JMS
-
以及必要时用于事务协调的JTA / JCA设置。
Spring Framework还支持依赖注入和Common Annotations规范,应用程序开发人员可以选择使用这些规范,而不是Spring Framework提供的Spring特定机制。
从Spring Framework 5.0开始,Spring至少需要Java EE 7级别(例如Servlet 3.1 +,JPA 2.1+) - 同时在Java EE 8级别提供与新API的开箱即用集成(例如,Servlet 4.0,JSON绑定API)在运行时遇到。这使Spring与Tomcat 8和9,WebSphere 9和JBoss EAP 7完全兼容。
随着时间的推移,Java EE在应用程序开发中的作用也在不断发展。在Java EE和Spring的早期,创建了应用程序以部署到应用程序服务器。今天,在Spring Boot的帮助下,应用程序以devops和云友好的方式创建,Servlet容器嵌入并且变得微不足道。从Spring Framework 5开始,WebFlux应用程序甚至不直接使用Servlet API,并且可以在不是Servlet容器的服务器(例如Netty)上运行。
Spring继续创新并不断发展。除了Spring Framework之外,还有其他项目,例如Spring Boot,Spring Security,Spring Data,Spring Cloud,Spring Batch等。重要的是要记住每个项目都有自己的源代码存储库,问题跟踪器和发布节奏。有关Spring项目的完整列表,请参见spring.io/projects。
spring优点:
1. 方便解耦,简化开发 (高内聚低耦合)
-
Spring就是一个大工厂(容器),可以将所有对象创建和依赖关系维护,交给Spring管理
-
spring工厂是用于生成bean (静态工厂模式)
面试题:spring的IoC(控制反转)底层用到什么设计模式?-- 静态工厂模式
2. AOP编程的支持
-
Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能
-
打印日志
-
面试题: aop的底层运用到什么设计模式? -- 动态代理
3. 声明式事务的支持 (AOP 动态代理)
-
只需要通过配置就可以完成对事务的管理,而无需手动编程
4. 方便程序的测试
-
Spring对Junit4支持,可以通过注解方便的测试Spring程序
-
@RunWith(SpringJUnit4ClassRunner.class)
-
@ContextConfiguration("applicationContext.xml")
5. 方便集成各种优秀框架 *****
-
Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts、Hibernate、MyBatis、Quartz(任务调度)等)的直接支持
-
Redis
-
Solr 搜索引擎
-
消息队列 ActiveMQ
-
……
6. 降低JavaEE API的使用难度 EJB
-
Spring 对JavaEE开发中非常难用的一些API(JDBC、JavaMail、远程调用等),都提供了封装,使这些API应用难度大大降低