缺点当然有,现在 Spring 越来越大,都开始使用 Gradle 构建了,支持的东西越来越多,这就导致大多数程序员对 Spring 的体系及结构都一知半解,网上乱七八糟的文章来回粘来粘去,搞得小码农都分不清楚到底哪种使用方式是对的,这归根到底就是因为 1. 对 Spring 的版本变更不清楚 2. 对 Spring 和 J2EE 规范的关系不清楚 3. 对 Spring 那堆配置和注解背后的原理不清楚
你可能知道 DI 是个什么概念,但你可能不知道 DI 的正确使用方式: 1. 你也许不知道 Spring 有自己的测试体系,我们可以直接使用 2. Spring 的事务管理优越在哪里,和 Hibernate 自己的事务管理有啥区别,怎么配置才对。 3. Spring 为啥提倡非侵入式(non-invasive)设计,又是从哪个版本开始这么干的,起因是什么 4. Spring 那些注解的使用原理和适用场景是什么,哪些是Spring 自己的注解,哪些是 J2EE DI 的标准注解,使用哪个好,为什么好。 ...........
上述的一切,当你把 Spring 官方提供的 Spring Reference 看的差不多了,也就明白了,大概 500 多页吧。
Spring 越来越大,衍生出其他的分支项目,虽然臃肿,但如果你知道如何筛选自己想要的功能,就不会臃肿,反而会很简洁,例如: 1. 你想实现 Rest 服务,那么 Spring MVC 就预置了这个功能,你没必要再去使用 CXF / Restlet 之类的 Rest 框架,还得忙着想怎么和 Spring 整合,这样,Struts 就出局了,Rest 框架也省了。 2. 你想实现权限功能,那么 Spring Security 可以替你搞定,你没必要使用 Apache Shiro 来做,也没必要苦逼地自己设计,而且人家还原生支持 OAuth 和 SAML 3. 你不想苦逼地写 DAO, 那么 Spring Data 可以替你做,这些 boilerplate code 全部替你实现了,而且对 JPA 或 NO-SQL 的支持也是相当方便。 4. 你想根据自己的需求生成代码,而不是苦逼地自己来写,可以试试 Spring Boot ...........
其他的,还有很多很多,你只需要记住,是不是臃肿,很大程度上是由你的认知和使用能力决定的,不是框架本身,具体如何学习这个优秀的框架,建议: 1. 视频教程点到为止,不可全信 2. 网上文章看看即可,别拷过来自己完事 3. 有问题,先去查看 Spring Reference, 多看原理。