怎样进修spring?是先进修设想形式照旧spring?_怎
如何学习spring?是先学习设计模式还是spring?
Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。我这里会分享一些学习Spring Boot的方法和干货,包括基础到进阶,按照本文的学习路线将会事半功倍,避免大家走了弯路导致浪费了大量时间,详见下文。
一. Spring Boot 是什么
我们刚开始学习 JavaWeb 的时候,使用 Servlet/JSP 做开发,一个接口搞一个 Servlet ,很头大,后来我们通过隐藏域或者反射等方式,可以减少 Servlet 的创建,依然不方便。
再后来,我们引入 Struts2/SpringMVC 这一类的框架,来简化我们的开发 ,和 Servlet/JSP 相比,引入框架之后,生产力确实提高了不少,用久了,又发现了新的问题,即配置繁琐易出错,要做一个新项目,先搭建环境,环境搭建来搭建去,就是那几行配置,不同的项目,可能就是包不同,其他大部分的配置都是一样的。
Java 总是被人诟病配置繁琐代码量巨大,这就是其中一个表现。那么怎么办?Spring Boot 应运而生,Spring Boot 是 Pivotal 团队在 2013 年开始研发的一个基于 Spring 的全新框架,试图将 Spring 中臃肿的配置进行简化,使 Java 开发更加轻量与快速,这个框架非常活跃,官方也非常重视。
Spring Boot 主要提供了如下功能
- 为所有基于 Spring 的 Java 开发提供方便快捷的入门体验。
- 开箱即用,有自己自定义的配置就是用自己的,没有就使用官方提供的默认的。
- 提供了一系列通用的非功能性的功能,例如嵌入式服务器、安全管理、健康检测等。
- 绝对没有代码生成,也不需要XML配置。
Spring Boot 的出现让 Java 开发又回归简单,因为确确实实解决了开发中的痛点,这个技术得到了非常广泛的使用,大概从 2017 年年初开始,Spring Boot 基本上面试必问,现在流行的 Spring Cloud 微服务也是基于 Spring Boot,,所有的 Java 工程师都有必要掌握好 Spring Boot。
从 Spring Boot 诞生的过程中,我们可以看到
- Spring Boot 并非另起炉灶,而是在现有的 Spring 框架的基础上整出来的,它把 Spring 中繁琐的配置进行了简化。
- Spring Boot 降低了 Spring 家族的使用门槛,使新手更易上手 Spring 框架。
- 既然 Spring Boot 不是另起炉灶,那么 Spring Boot 学习要不要跳过 SSM 呢?听松哥来分析。
二. 要不要跳过 SSM
这是很多人问我的一个问题,我的建议是不要。
Spring Boot 基于 Spring,简单且容易上手,很多人想的跳过 SSM 直接上 Spring Boot。当我们细究 Spring Boot 中的自动化配置、条件注解、Java 配置等东西时,实在找不出太多新鲜玩意,Java 配置是 Spring3 开始提供的,条件注解 也是 Spring 中的东西,很多很多,都是 Spring 中就有的,只不过这些东西在 Spring Boot 时代大放异彩。
也就是说,即使你跳过了 SSM 直接去学习 Spring Boot,实际上还是在学习 Spring 中的东西,那既然这样,我们还不如坐下来,老老实实把 Spring 过一遍。
各个领域的开发工程师其实都会面临类似的问题,学习了一些优秀的封装框架之后,还有没有必要去学习底层?有必要!因为底层的东西可以让你深刻的理解你目前用的这个东西,也能让你在出问题时快速解决掉问题。
其实无论你想搞什么技术,都要有牢固的基础知识,这些牢固的基础知识就像肥沃的土壤,可以孕育出各种不同技术方向的牛人,基础掌握好了,学什么框架都快。今天你跳过 SSM 直接学了 Spring Boot,假如有一天 Spring Boot 不行了,Pivotal 团队又基于 Spring 框架搞了一个新的框架出来,那你是不是又要去学一遍?如果你一开始就掌握了 Spring 的各种用法,无论基于它搞出来什么样的框架,你都能快速上手。更进一步,如果你研究透了 Spring 中的 AOP、Ioc/DI,你会发现很多框架大同小异,核心思想就是这些东西,那么你在学习 Spring 之外的框架,就会容易很多。
三. 都要学哪些?
那么 Spring Boot 学习都要学哪些东西呢?我这里列举了一个进阶路线
- 最基础的是 Spring/SpringMVC 相关的东西了。
- 搭配各种页面模板的使用,例如 Jsp/Thymeleaf/Freemarker/Groovy Templates 等。
- 和各种 SQL 数据库的整合,以及一些常见的数据持久化框架,例如 JdbcTemplate、MyBatis、Jpa 等。
- 和各种 NoSQL 数据库的整合,例如 Redis、MongoDB、Elasticsearch 等。
- 搭配安全管理相关的知识点,例如 Spring Security、Shiro 等。
- 缓存的使用,例如 JCache、Ehcache 等。
- 和消息中间件的搭配整合,如 ActiveMQ、RabbitMQ、Kafka 等。
- 数据校验/定时任务/邮件发送等。
- 各种监控的使用。
- 结合 WebSocket 的使用。
- Spring Cloud 中相关组件。
- ...
上面这些只是我列出来的一些比较常见的技术点,每个技术点都还可以延伸出很多其他的东西,大家可以结合自己的情况,按照顺序一个一个来学,这里边还涉及到很多第三方的框架,例如 Redis、MongoDB、RabbitMQ 等,Spring Boot 的出现只是让这些组件在和 Spring 家族的产品整合时变得更加方便,并不会简化这些组件原本的用法,所以,该学 Redis、该学 MongoDB、该学 RabbitMQ 等等,还是一个不能少。以 Redis 为例,学会了 Redis,学会了 Spring 整合 Redis,再回过头来看 Spring Boot 整合 Redis,那简直太 easy 了。
,学习 Spring Boot 最终我们还是奔着快速开发和微服务去的,所以,像 Docker、Spring Cloud 等技术,也是需要去了解一下的。
四. 学习方法
1课程式学习
主要多见于大学生、毕业找工作去培训学校或者自己在网络课程中学习的。课程式学习很有必要,能够获得稳定的知识结构,打下良好的基础。
2.碎片化时间学习
碎片化学习主要是利用课余时间,多见于上班族,课余利用上下班、晚上时间、周末时间来实现学习。
3.强化学习
这是个非常行之有效的方法,又可以叫魔鬼式训练、封闭式训练,在集中的时间内,人很容易突破自我极限,达到一种前所未有的高度。
4.项目式学习
就是项目上的需求,要求你用到 Spring Boot 来实现某个业务功能,而且有时间限制,要求你在某年某月某日完成,没办法,只能硬着头皮干下去。这种有收益、有目标、还动力的机会确实是人生中难得的,如果你喜欢这个目标,你可以立马扑上去。
5.随用随学
比如项目中用到mql,那么搜索下罗相关的知识,搭建demo测试用例,然后在项目中实践。
哪种方式更为适合,需要根据各个人的情况来看项目评估如下
- 有人带着你学习看着你学习>自己学习
- 项目学习>非项目学习
- 强化学习>非强化学习
五. 学习资源
【入门-基础】
- Spring Boot 快速入门
- Spring Boot 基础
- f="">微服务构建 Spring Boot
【入门-缓存】
- >SpringBoot 中应该怎样使用 Redis
- ef="">Redis 事务在 SpringBoot 中的应用
- href="">优化 Redis 的使用策略
【入门-实践】
- 3分钟快速搭建Spring Boot开发环境
- Spring Boot 最佳实践(一)快速入门
- Spring Boot 最佳实践(二)集成Jsp与生产环境部署
- Spring Boot 最佳实践(三)模板引擎FreeMarker集成
- Spring Boot 最佳实践(四)模板引擎Thymeleaf集成
- Spring Boot 最佳实践(五)Spring Data JPA 操作 MySQL 8
【进阶-Web进阶】
- Spring Boot统一异常处理
- Spring Boot Web 应用性能优化
- 基于Spring Boot快速开发RESTful风格API接口
【进阶-实例】
- 基于Spring Boot实现图片上传/加水印一把梭操作
- Spring Boot日志框架实践
- Spring Boot 集成 MyBatis和 SQL Server实践
- Spring Boot中使用定时任务
- Spring Boot 一分钟拥有支付宝支付功能
六. 学完Spring Boot基础之后如何进阶提升?
1.springsession实战
Spring Session 是Spring家族中的一个子项目,它提供一组API和实现,用于管理用户的session信息,它把servlet容器实现的httpSession替换为spring-session,专注于解决 session管理问题,Session信息存储在Redis中,可简单快速且无缝的集成到我们的应用中。
2.RabbitMQ
RabbitMQ是流行的开源消息队列系统,用erlang语言开发,RabbitMQ是AMQP(高级消息队列协议)的标准实现。采用该技术,我们可以实现异步处理、流量削峰、系统解耦。
3.Nginx实战应用
国内有大量网站使用Nginx,比如百度、京东、新浪、网易、腾讯、淘宝等。由于在日常工作中,我们不可避免地要接触和使用这样一款高性能的eb服务器,所以我们非常有必要学习和掌握Nginx。
4.FastDFS详解
FastDFS为互联网量身定制,简单、灵活、高效,采用C语言开发,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。。
我觉的学好Spring Boot主要还是得有一个持续性学习的态度,然后结合我上面的从Spring Boot基础到进阶,一直坚持不懈的学习下去,百分百会精通Spring Boot的!
本文分享自华为云社区《【云驻共创】Spring Boot要如何学习?》,作者黎燃。
如果仅仅是想学会使用,则可以不学习设计模式,如果想深入层次的学习Spring底层源码,则设计模式是必不可少的!
下面从几个方面进行介绍
(1) Spring 源码中使用了哪些设计模式?
(2) 怎样学习设计模式?
(3) 推荐设计模式的书籍
Spring源码中使用了哪些设计模式?
spring 中使用了多种设计模式,下面简单介绍一下主要的设计模式
(1) 单例模式
保证独一无二,为了提高资源重复利用,通过技术手段保证在整个系统运行阶段,只有一个实例
场景 配置文件、监控程序、IOC 容器、日历
实现手段 懒汉式、饿汉式、注册登记式、反序列处理
Spring最常用的,注册登记式,效率性能最高的
Spring中bean的默认作用域就是singleton(单例)。
实现方式
- xml : <bean id="userService" class=".snailclimb.UserService" scope="singleton"/>
- 注解@Scope(value = "singleton")
Spring 通过 ConcurrentHashMap 实现单例注册表的特殊方式实现单例模式。Spring 实现单例的核心代码如下
(2) 代理设计模式
代理模式在 AOP 中的应用
AOP(Aspect-Oriented Programming:面向切面编程)能够将那些与业务无关,却为业务模块所共同调用的逻辑或责任(例如事务处理、日志管理、权限控制等)封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可拓展性和可维护性。
Spring AOP 就是基于动态代理的,如果要代理的对象,实现了某个接口,那么Spring AOP会使用JDK Proxy,去创建代理对象,而对于没有实现接口的对象,就无法使用 JDK Proxy 去进行代理了,这时候Spring AOP会使用Cglib ,这时候Spring AOP会使用 Cglib 生成一个被代理对象的子类来作为代理,如下图所示
你也可以使用 AspectJ ,Spring AOP 已经集成了AspectJ ,AspectJ 应该算的上是 Java 生态系统中最完整的 AOP 框架了。
使用 AOP 之后我们可以把一些通用功能抽象出来,在需要用到的地方直接使用即可,这样大大简化了代码量。我们需要增加新功能时也方便,这样也提高了系统扩展性。日志功能、事务管理等等场景都用到了 AOP 。
Spring AOP 和 AspectJ AOP 有什么区别?
Spring AOP 属于运行时增强,而 AspectJ 是编译时增强。 Spring AOP 基于代理(Proxying),而 AspectJ 基于字节码操作(Bytecode Manipulation)。
Spring AOP 已经集成了 AspectJ ,AspectJ 应该算的上是 Java 生态系统中最完整的 AOP 框架了。AspectJ 相比于 Spring AOP 功能更加强大, Spring AOP 相对来说更简单,
如果我们的切面比较少,那么两者性能差异不大。,当切面太多的话,最好选择 AspectJ ,它比Spring AOP 快很多。
(3) 模板方法
应用场景 JdbcTemplate 工作流
代码场景 模拟Spring JdbcTemplate的简单实现
Spring 中 jdbcTemplate、hibernateTemplate 等于 Template 结尾的对数据库操作的类,它们就使用到了模板模式。一般情况下,我们都是使用继承的方式来实现模板模式, Spring 并没有使用这种方式,而是使用Callback 模式与模板方法模式配合,既达到了代码复用的效果,增加了灵活性。
(4) 观察者模式
观察者模式是一种对象行为型模式。它表示的是一种对象与对象之间具有依赖关系,当一个对象发生改变的时候,这个对象所依赖的对象也会做出反应。Spring 事件驱动模型就是观察者模式很经典的一个应用。Spring 事件驱动模型非常有用,在很多场景都可以解耦我们的代码。比如我们每次添加商品的时候都需要重新更新商品索引,这个时候就可以利用观察者模式来解决这个问题。
Spring 事件驱动模型中的三种角色
事件角色
ApplicationEvent (.springframeork.context包下)充当事件的角色,这是一个抽象类,它继承了java.util.EventObject并实现了 java.io.Serializable接口。
Spring 中默认存在以下事件,他们都是对 ApplicationContextEvent 的实现(继承自ApplicationContextEvent)
- ContextStartedEventApplicationContext 启动后触发的事件;
- ContextSpedEventApplicationContext 停止后触发的事件;
- ContextRefreshedEventApplicationContext 初始化或刷新完成后触发的事件;
- ContextClosedEventApplicationContext 关闭后触发的事件。
事件监听者角色
ApplicationListener 充当了事件监听者角色,它是一个接口,里面只定义了一个 onApplicationEvent()方法来处理ApplicationEvent。ApplicationListener接口类源码如下,可以看出接口定义看出接口中的事件只要实现了 ApplicationEvent就可以了。所以,在 Spring中我们只要实现 ApplicationListener 接口实现 onApplicationEvent() 方法即可完成监听事件
事件发布者角色
ApplicationEventPublisher 充当了事件的发布者,它也是一个接口。
ApplicationEventPublisher 接口的publishEvent()这个方法在AbstractApplicationContext类中被实现,阅读这个方法的实现,你会发现实际上事件真正是通过ApplicationEventMulticaster来广播出去的。具体内容过多,就不在这里分析了,后面可能会单独写一篇文章提到。
Spring 的事件流程
定义一个事件: 实现一个继承自 ApplicationEvent,并且写相应的构造函数;
定义一个事件监听者实现 ApplicationListener 接口,重写 onApplicationEvent() 方法;
使用事件发布者发布消息: 可以通过 ApplicationEventPublisher 的 publishEvent() 方法发布消息。
Example:
(5) 适配器模式
适配器模式(Adapter Pattern) 将一个接口转换成客户希望的另一个接口,适配器模式使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。
spring AOP中的适配器模式
我们知道 Spring AOP 的实现是基于代理模式, Spring AOP 的增强或通知(Advice)使用到了适配器模式,与之相关的接口是AdvisorAdapter 。Advice 常用的类型有BeforeAdvice(目标方法调用前,前置通知)、AfterAdvice(目标方法调用后,后置通知)、AfterReturningAdvice(目标方法执行结束后,return之前)等等。每个类型Advice(通知)都有对应的拦截器:MethodBeforeAdviceInterceptor、AfterReturningAdviceAdapter、AfterReturningAdviceInterceptor。Spring预定义的通知要通过对应的适配器,适配成 MethodInterceptor接口(方法拦截器)类型的对象(如MethodBeforeAdviceInterceptor 负责适配 MethodBeforeAdvice)。
代码场景登录,为了兼容旧系统的登录功能,在老系统的基础之上进行兼容编程,Spring Adapter结尾的
(6) 装饰器模式
装饰者模式可以动态地给对象添加一些额外的属性或行为。相比于使用继承,装饰者模式更加灵活。简单点儿说就是当我们需要修改原有的功能,但我们又不愿直接去修改原有的代码时,设计一个Decorator套在原有代码外面。其实在 JDK 中就有很多地方用到了装饰者模式,比如 InputStream家族,InputStream 类下有 FileInputStream (读取文件)、BufferedInputStream (增加缓存,使读取文件速度大大提升)等子类都在不修改InputStream 代码的情况下扩展了它的功能
应用场景 IO流 、数据源、也用代码改造一个旧系统,在Spring 中Decorator结尾的,Wrapper结尾的都是。
(7) 委派模式
代理模式的特殊情况,全权代理
应用场景 项目经理、Dispatcher
代码场景 Spring 中ServletDispatcher /Delegate 命名结尾的都是委派模式
怎样学习设计模式
(1) 调整好心态,不要指望一蹴而就,不可浮躁。
学习和掌握设计模式需要一个过程,不同的阶段看这些设计模式有不同的领悟和感受。不要指望真正的设计模式的书籍既简单又有趣,一看就懂的。
(2) 学习设计模式的第一步 : 准确理解每个设计模式的功能、基本结构、标准实现,了解适合使用它的场景以及使用的效果。
(3) 学习设计模式的第二步: 实际的开发中,尝试着使用这些设计模式,并反复思考和是否使用得当,是否需要做一些变化。
(4) 学习设计模式的第三步 再回头去看设计模式的理论,有了实际的模式应用经验再看设计模式,会有不同的感悟,一边看一边结合着应用经验来思考。比如设计模式的本质功能是什么?它是如何实现的?z这种实现方式还可以在什么地方应用? 如何才能把这个设计模式和具体的应用结合起来?这个设计模式的出发点是什么?等等。可以有很多考虑的点,从不同的角度对设计模式进行思考。
(5) 第四步 多次反复学习设计模式的第二步和第三步。也就是在实际开发中使用,然后结合理论思考,然后再应用,再思考...如此循环,反复多次,直到达到对设计模式基本掌握的水平。
简而言之,要注意使用设计模式的理论和实践相结合,理论指导实践,实践反过来加深对理论的理解,如此反复循环,成螺旋式上升!
设计模式书籍的推荐
这本书非常经典,大家可以反复阅读,由于网上已没有纸质书,只有电子版,
有需要电子版的,可以私信。
。 如果你是想学习spring,建议你可以在网上找一些spring的基础课程,系统学习下。如
spring容器、依赖注入、控制反转、aop、bean的生命周期等等
。如果你是想学设计模式,也可以在网上找到对应的系统课程
。 spring与设计模式是两个概念,没有一定要先学谁。 spring源码中,使用了许多优秀的设计模式,如工厂、单例、代理、观察者等。没有学过设计模式,你也可以看的懂。设计模式,只是一种经验,一种问题的最优解决方案,而不是一种新的技术点。
现在你在网上随便搜搜,都会搜到成百上千条的答案。最重要的一点,多用,多想,多。
众所周知,spring的生态圈在java开发中的地位那可是举足轻重的。现在eb开发不是SSM就是SpringBoot全家桶,想要学好Spring,就要知道Spring在我们的开发工作中做了什么,通俗点来讲,就是我们在开发中应用Spring有什么好处。
Spring的特性,我们都知道Ioc和AOP吗。
IOC控制反转,说的直白点就是,之前该你做的事,现在不伦你做了。
举个不太恰当的例子现在你开个饭店,做什么菜,做菜需要什么材料,都是你自己说了算,现在生意不太好做呀,你要管的事情太多了呀。
隔壁那个加盟店的生意不错呀,轻松还挣钱。所以你想着,我也加盟个饭店吧。你加盟之后呢,你就发现,原来你做啥菜,买啥菜,是你自己定的菜单,现在是人家加盟公司,来给你定做什么菜 ,来做菜的食材,都是人家直接配送了。你只能使用总部调配送来的东西呀。你不能决定你用啥菜了。
换到我们的Spring的Ioc来说呢,就是之前你这个对象要使用那个对象来干啥事,你可以自己ne一个呀,现在不行了,你这个对象不能随便用了,得用我Spring指定分配给你的这个对象。你是失去了对象的创造和选择权利。
再来说Spring的学习,个人觉得不需要非得先学习设计模式,在学习Spring的过程中你会更多,更深入的了解到这些。
给你推荐本Spring的书Spring源码解析
掌握applicationcontext接口,beanpostprocessor。就是ioc容器和aop,尤其是aop。拓展了解aspectj。spring的所有生态成员都是基于ioc和aop的。前期需要掌握声明式事务,了解动态代理模式,大致aop的实现原理,各种advice。sping mvc是需要掌握的,主要放在dispatcherservlet接口。再然后需要了解一下观察者模式,发布订阅模式,向spring提供的事件驱动编程过渡。后面可以多了解spring session,cache,security,spring boot ,再向微服务过渡。其中可能还涉及定时任务啥的,工作中肯定会用到。一句话 万物皆可aop ,重中之重!
奇闻怪事
- 黎姿老公马廷强前妻 黎姿老公马廷强前妻是谁
- 紫禁城闹鬼是真的吗 紫禁城闹鬼是怎么回事
- 80年黄河透明棺材事件 80年代黄河透明棺材始末
- 51区外星人录像是真的吗 51区外星人真的存在吗
- 姜潮麦迪娜恋爱过程 姜潮麦迪娜怎么认识的
- 根达亚文明大概离现在多久 根达亚文明距今多少
- 赤塔事件真的还是假的 赤塔事件到底怎么回事
- 百慕大三角在哪个国家 百慕大三角在哪个国家的
- 邓超出轨安以轩:邓超出轨安以轩是不是真的
- 中国十大闹鬼最凶的地方 中国十大闹鬼最凶的地
- 湘西鬼结婚事件:湘西鬼结婚事件真假
- 中国昆仑山10大灵异绝密档案 中国昆仑山10大灵异
- 李维嘉的父亲是谁 李维嘉父母是哪里人
- 朱秀华事件是不是真的 朱秀华事件的真相是什么
- 太湖冤魂:太湖冤魂事件真假
- 爪哇虎和东北虎谁厉害 爪哇虎和东北虎谁厉害一