在实际开发中,我总结了Spring的优点如下:

任何的java的开发框架其产生都只有一个前提目的:为了更方便的mvc开发

jquery+json 简化数据的传输,同时隐藏dom操作的细节

spring诞生了,它的诞生是解决了横切面以及注入编程的窘境。

spring提供有如下的核心组件

1.容器核心组件

beans:表示的是对spring以及所有bean对象的管理

core:包含了最底层的开发支持,例如:依赖的注入关系,资源文件的访问,数据类型的转换

context:提供的是一个完整的容器上下文,在这个上下文可以处理对象生命周期或者是事务

表达式语言模块:利用spel实现表达式语言的操作,以增强string的功能

名词解释Spring表达式语言(简称SpEL)它可以在运行时查询和操作对象图。和EL相比,SpEL功能更加强大,它甚至支持方法调用和基本字符串模板函数。SpEL可以独立于Spring容器使用——只是当成简单的表达式语言来使用;也可以在Annotation或XML配置中使用SpEL,这样可以充分利用SpEL简化Spring的Bean配置。

2.切面编程

Spring中使用AspectJ注解和XML配置两种方式实现AOP

aop:是整个spring的灵魂所在,利用切面编程来解决所有的辅助性操作。例如,关闭数据库,事物处理

3.数据访问模块

在整个Java之中,对于数据库的操作只有jdbc一种操作形式,所以在spring里面也提供有专门的ormapping框架,这个框架就利用jdbc半原生完成。

orm:spring提供的ormapping框架的处理操作,可以方便的整合:hibernate,mybatisis等常见组件。

oxm:提供了一个对象与xml文件之间的互相转换

jms:提供有消息服务的支持

transactions:表示在数据访问模块支持了事物的操作处理。、

4.web支持模块

mvc:spring提供有自己的mvc实现(是目前实现最好的一种)

spring方便的支持struts2的管理,而不是struts1

spring可以自己负责处理mvc的servlet程序类

spring完全承办了一个项目,能够独立开发,并且可以容纳其他框架同时存在的综合性框架,spring控制层,数据层都可

以负责。

总结
spring中避免了关键字new造成的耦合问题。
spring本身就是一个工厂,不需要再编写工厂类了。
spring不需要进行明确的引用关系的传递,直接通过配置完成
所有框架几乎都可以在spring中整合在一起使用。
spring编程=factory设计模式+proxy设计模式

任何事物都有两面性,Spring也有如下缺点:

明明一个很轻量级的框架,却给人感觉大而全,这就是它的缺点。
Spring的核心概念是啥,最主要的,IoC和AOP,这两个核心服务的对象是啥,就是那堆beans,Spring我们可以理解为就是存放这些bean的容器,它最核心的就干这些事。
IoC干嘛的,就是为了让开发者关注的重心放在如何使用这些bean。不管bean怎么来,只要@Autowired就给我老老实实出现,让我调接口就好,不需要每次用之前都要手动构建,尽量减少手动实例化bean的次数。Spring Boot以前,主要在beans.xml中注册bean,Spring Boot的话只要在Configuration中定义一个@Bean方法即可,就为了做好这件事,Spring弄了多少东西,BeanDefinition,BeanFactory,FactoryBean,然后Bean的生命周期接口好几个,Aware接口又好几个,等等,
然后是AOP,AOP是很好的特性,在Spring中其主要目的就是以一种非浸入的方式对bean进行扩展,看到没,又是bean。为了对bean支持,Spring弄了一套AspctJ的子集,既有Java原生的接口代理,又有更加灵活的Cglib,光是AOP的概念就不少,更不要说实现的原理。简单的大 e 家都可以说出一二三四五,但深入细节谁有把握?
所以,Spring就是围绕着bean展开的,它主要就是作为bean的容器,在这个基础上,有了SpringMVC,有了JPA,有了Cloud,有了Data Flow,以及其他模块。但这些模块的本质,不全是Spring,比如JPA,核心还是Hibernate,Cloud,核心是另外一套微服务框架。Spring就好比胶水,通过bean把这些模块粘在一起。实践过程中,反复的提醒自己,不要用Spring玩花,让它老老实实的做bean的容器就好了。我这么说,不看源码,你会觉得Spring重吗?
可就这么些个东西,Spring弄出了多少名堂。随便找个地方打断点,调用就不下二十来层,在现在这种强调轻量化服务的大环境下,不被吐槽才怪。
当然,我认为也不能全怪Spring。Java这门语言动态性本来就是它的弱项,Spring能把Java包装的像个动态化的语言已经蛮拼了。Spring背的最大的锅,我认为就是J2EE,就凭那套在当时有一定价值但放现在已经淘汰的标准,没有Spring,Java的企业级市场未必有今天。
不过话说回来,从学习企业级Java开发的角度看,Spring的代码依然是教科书般的代码。面向对象封装,编程原则,设计模式,都是具有很高的参考价值。如果你才开始,我建议先沉住气,老老实实的敲代码,看文档,不管最后还在不在Java圈,将来一定会收获不小。
有时候,你不复杂一些,又怎么能体会到简单的价值呢?


Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐