大家好,又见面了,我是你们的朋友全栈君。
合法程序媛 2017-10-23 09:35
优效学院,名师执教,学习更优效,IT在线教育领导者。三人行必有我师,人生是需要不断学习的,在这里我们相遇就是缘分,欢迎大家加群—-四六零五七零八二四—-让我们共同进步!希望各位可以看完这篇文章,也欢迎大家在下面留言讨论,天冷了,也动动手指转发收藏一下,谢谢大家!
Spring是一个开源的控制反转(Inversion of Control ,IoC)和面向切面(AOP)的容器框架.它的主要目得是简化企业开发。
使用Spring可以降低组件之间的耦合度,实现软件各层之间的解耦。可以使用容器提供的众多服务,如:事务管理服务、消息服务等等。当我们使用容器管理事务时,开发人员就不再需要手工控制事务.也不需处理复杂的事务传播。容器提供单例模式支持,开发人员不再需要自己编写实现代码。容器提供了AOP技术,利用它很容易实现如权限拦截、运行期监控等功能。容器提供的众多辅作类,使用这些类能够加快应用的开发,如: JdbcTemplate、 HibernateTemplate。Spring对于主流的应用框架提供了集成支持,如:集成Hibernate、JPA、Struts等,这样更便于应用的开发。
Spring提供了管理业务对象的一致方法并且鼓励了注入对接口编程而不是对类编程的良好习惯。Spring的作用就是完全解耦类之间的依赖关系,一个类如果要依赖什么,那就是一个接口。至于如何实现这个接口,这都不重要了。只要拿到一个实现了这个接口的类,就可以轻松的通过xml配置文件把实现类注射到调用接口的那个类里。所有类之间的这种依赖关系就完全通过配置文件的方式替代了。所以Spring框架最核心的就是所谓的依赖注射和控制反转。
针对Spring的学习,第一步就是理解IoC和AOP,这可以说是基础。
IoC控制反转,对象创建责任的反转。我们知道,Spring中的BeanFacotory是IoC容器的核心接口,负责实例化、定位、配置应用程序中对象及监理这些对象间的依赖。XmlBeanFacotory实现BeanFactory接口,通过获取xml配置文件数据,组成应用对象及对象间的依赖关系。
顺便说一下,在Spring中有三种注入方式,第一种是set注入,第二种是接口注入,还有一种是构造方法注入。
AOP面向切面编程,也就是纵向的编程。在OOP面向对象的使用中,无可避免的会出现代码重复,而且使用面向对象的编程方式,这种重复无法避免,比如用户权限判断中,根据相应的权限执行相应的方法;在servlet中设置编码格式时,同样相同的代码出现很多次,而且还根业务无关,很容易忘记写,结果运行的时候就出现乱码。这种重复代码不仅使编码麻烦,而且还不容易维护。而AOP则将这些代码整理起来,将解决某个切面问题的代码单独的放在某个模块中,然后再织入到程序中。
Spring框架中AOP的使用步骤,
第一步拷贝jar包
第二步spring配置文件中增加命名空间和约束文件
第三步写被代理的类和扩展类第
四步由配置文件声明
弄清楚了IoC和AOP之后,要学习的是SpringMVC。想要弄清楚Spring是怎么配置的,就要学会Servlet和JSP。学习Servlet是一定不能省的,现在流行的SpringMVC和Struts2都是基于Servlet的,Servlet是MVC模型最为基本的表现形态。只有深入了解Servlet才能理解后边的新技术。
我们在浏览器点击链接和按钮产生的消息不是发送给Servlet的,而是发送给web容器的。Web容器接收消息后转交给Servlet处理。而web容器和Servlet的交流依赖于Servlet接口。Servlet是一种接口规范,所以只要我们编写的Java类符合Servlet规范,那么就能被Web容器识别并被容器管理。Servlet容器通过向方法的参数赋值,HttpServletRequest或者HttpServletResponse传递来实现请求和响应。
JSP是面向服务器的。我们在写JSP时预设客户端是浏览器,JSP就是一个Servlet。
最后,如果想有一群“臭味相投”的朋友来一起交流学习的话,欢迎大家搜索群460570824,让我们共同进步!
====================================================================================
皓月苍狼 2017-10-24 22:28
==========================================================================================
稳稳地幸福y 2017-10-24 21:32
如今做Java尤其是web几乎是避免不了和Spring打交道了,但是Spring是这样的大而全,新鲜名词不断产生,学起来给人一种凌乱的感觉,我就在这里总结一下,理顺头绪。
Spring 概述
Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的(替代更加重量级的企业级Java技术, 尤其是EJB),它完成了大量开发中的通用步骤,留给开发者的仅仅是与特定应用相关的部分,从而大大提高了企业应用的开发效率。
Spring 框架是一个分层架构,由 7 个定义良好的模块组成。Spring 模块构建在核心容器之上,核心容器定义了创建、配置和管理 bean 的方式如下图:
组成 Spring 框架的每个模块都可以单独存在,或者与其他一个或多个模块联合实现。每个模块的功能如下:
Spring 核心特点:IOC和AOP
控制反转模式(IOC)也称作依赖性介入(DI)的基本概念是:不创建对象,但是描述创建它们的方式。在代码中不直接与对象和服务连接,在配置文件中描述哪一个组件需要哪一项服务。容器 (在 Spring 框架中是 IOC 容器) 负责将这些联系在一起。在典型的 IOC 场景中,容器创建了所有对象,并设置必要的属性将它们连接在一起,决定什么时间调用方法。
Rod Johnson是第一个高度重视以配置文件来管理Java实例的协作关系的人,他给这种方式起了一个名字:控制反转(Inverse of Control,IoC)。后来Martine Fowler为这种方式起了另一个名称:依赖注入(Dependency Injection),因此不管是依赖注入,还是控制反转,其含义完全相同。
当某个Java对象(调用者)需要调用另一个Java对象(被依赖对象)的方法时,在传统模式下通常有两种做法
原始做法: 调用者主动创建被依赖对象,然后再调用被依赖对象的方法
简单工厂模式: 调用者先找到被依赖对象的工厂,然后主动通过工厂去获取被依赖对象,最后再调用被依赖对象的方法.
注意上面的主动二字,这必然会导致调用者与被依赖对象实现类的硬编码耦合,非常不利于项目升级的维护。使用Spring框架之后,调用者无需主动获取被依赖对象,调用者只要被动接受Spring容器为调用者的成员变量赋值即可,由此可见,使用Spring后,调用者获取被依赖对象的方式由原来的主动获取,变成了被动接受——所以Rod Johnson称之为控制反转。
另外从Spring容器的角度来看,Spring容器负责将被依赖对象赋值给调用者的成员变量——相当于为调用者注入它依赖的实例,因此Martine Fowler称之为依赖注入。
AOP(Aspect Orient Programming)也就是面向切面编程,作为面向对象编程的一种补充,已经成为一种比较成熟的编程方式。其实AOP问世的时间并不太长,AOP和OOP互为补充,面向切面编程将程序运行过程分解成各个切面。
AOP专门用于处理系统中分布于各个模块(不同方法)中的交叉关注点的问题,在JavaEE应用中,常常通过AOP来处理一些具有横切性质的系统级服务,如日志、事务管理、安全检查、缓存、对象池管理等,AOP已经成为一种非常常用的解决方案。
在典型的面向对象开发方式中,可能要将日志记录语句放在所有方法和 Java 类中才能实现日志功能。在 AOP 方式中,可以反过来将日志服务模块化,并以声明的方式将它们应用到需要日志的组件上,这样 Java 类就不需要知道日志服务的存在,也不需要考虑相关的代码。所以,用 Spring AOP 编写的应用程序代码是松散耦合的。
Spring 优点总结
Spring包含许多项目,下面挑一些最常用的出来总结一下。
Spring MVC是Spring中的基础 Web 框架,基于模型-视图-控制器(Model-View-Controller,MVC)模式实现,它能够帮你构建像Spring框架那样灵活和松耦合的Web应用程序。
在该框架下,一次web请求大致可以分为如下图几个步骤,这些划分分离了职责,使得代码灵活、维护性更好。
为了使用该框架,我们首先要配置DispatchServlet,也就 是前端控制器,然后启用Spring MVC,并编写控制器,视图,模型等等。
其中,DispatcherServlet是Spring MVC的核心,DispatcherServlet启动的时候,它会创建Spring应用上下文,并加载配置文件或配置类中所声明的bean或者自动扫描的bean,但是在Spring Web应用中,通常还会有另外一个应用上下文,这个应用上下文是由ContextLoaderListener创建的。DispatcherServlet加载包含Web组件的bean,如控制器、视图解析器以及处理器映射,而ContextLoaderListener要加载应用中的其他bean,通常是驱动应用后端的中间层和数据层组件。
Spring MVC是一个强大灵活的Web框架。借助于注解,Spring MVC提供了近似于POJO的开发模式,这使得开发处理请求的控制器变得非常简单,同时也易于测试。而且Spring MVC还支持多种视图解析器如JSP,Tiles,Thymeleaf,使得前端界面的功能更强大,编写更容易。
Spring Web Flow是Spring MVC的一个扩展, 它为基于流程的会话式Web应用(购物车或者向导功能)提供了支持。简言之,它是一个流程框架,能够引导用户执行一系列向导步骤。
在Spring Web Flow中,流程是由三个主要元素定义的:状态、转移和流程数据。状态( State)是流程中事件发生的地点,在流程中通过转移的方式从一个状态到另一个状态,流程的当前状况称为流程数据。
状态分为:
转移连接了流程中的状态。流程中除结束状态之外的每个状态,至少都需要一个转移,这样就能够知道一旦这个状态完成时流程要去向哪里。状态可以有多个转移,分别对应于当前状态结束时可以执行的不同的路径。
当流程从一个状态进行到另一个状态时,它会带走一些流程数据。有时候,这些数据只需要很短的时间(可能只要展现页面给用户)。有时候,这些数据会在整个流程中传递并在流程结束的时候使用。
Spring Web Flow 可以构建会话式应用程序的Web框架,这是好的,但是感觉其配置只能用xml这个设计不太合理,尤其是当bean很多或者流程节点很多时都不好维护。
安全对于许多应用都是一个非常关键的切面,因为安全性是超越应用程序功能的一个关注点,应用系统的绝大部分内容都不应该参与到与自己相关的安全性处理中。尽管我们可以直接在应用程序中编写安全性功能相关的代码,但更好的方式还是将安全性相关的关注点与应用程序本身的关注点进行分离,作为系统的一个切面。Spring Security就是通过AOP和Filter来为应用程序实现安全性的。
使用Servlet规范中的Filter保护Web请求并限制URL级别的访问。Spring Security还能够使用Spring AOP保护方法调用——借助于对象代理和使用通知,能够确保只有具备适当权限的用户才能访问安全保护的方法。
Spring Security非常灵活,能够基于各种数据存储来认证用户。它内置了多种常见的用户存储场景,如内存、关系型数据库以及LDAP。但我们也可以编写并插入自定义的用户存储实现。
当为浏览器渲染HTML内容时,你可能希望视图中能够反映安全限制和相关的信息。一个简单的样例就是渲染用户的基本信息( 比如显示“您已经以……身份登录”)。或者你想根据用户被授予了什么权限,有条件地渲染特定的视图元素。Spring Security本身提供了一个JSP标签库,而Thymeleaf通过特定的方言实现了与Spring Security的集成。借助于这些,可以很容易的实现对视图的保护。
Spring Data 是为了简化构建基于 Spring 框架应用的数据访问技术,包括关系数据库、NoSQL、Map-Reduce 框架、云数据服务等等,旨在提供一种通用、统一的编码模式(但是并不是代码完全一样),使得在Spring中使用任何数据库都变得非常容易。
Spring Data作为Spring Source的其中一个父项目,旨在统一和简化对各类型持久化存储,而不拘泥于是关系型数据库还是NoSQL数据存储。
目前的Spring Data 包含如下的模块(或者说子项目):
无论是哪种持久化存储,数据访问对象(DAO,即Data Access Objects)通常都会提供对单一域对象的CRUD(创建、读取、更新、删除)操作、查询方法、排序和分页方法等。Spring Data则提供了基于这些层面的统一接口(CrudRepository,PagingAndSortingRepository)以及对持久化存储的实现。
你可能接触过某一种Spring模型对象——比如JdbcTemplate——来编写访问对象的实现。但是在基于Spring Data的数据访问对象,我们只需定义和编写一些查询方法的接口(基于不同的持续化存储, 定义有可能稍有不同),Spring Data会在运行时间生成正确的实现。
所有Spring Data的子项目都支持:
然而一些Spring Data子项目,如Spring Data Redis和Spring Data Riak都只是提供模板,这是由于其相应的数据存储都只支持非结构化的数据,而不适用于对象的映射和查询。
Spring诞生时是Java企业版(Java Enterprise Edition, JEE,也称J2EE)的轻量级代替品。无需开发重量级的Enterprise JavaBean(EJB),Spring为企业级Java开发提供了一种相对简单的方法。
虽然Spring的组件代码是轻量级的,但它的配置却是重量级的。一开始,Spring用XML配置,而且是很多的XML配置,即使后来有基于注解的改善,我们依然难逃大量配置的魔爪。而Spring Boot让这一切成为了过去,如果说Spring的目的是简化程序的开发,那么Spring Boot就是为了简化Spring本身的开发。
Spring Boot依赖于自动配置技术将Spring应用中样板式的配置移除掉,这样就能让我们免受于一大堆的配置之苦,更加专注于业务功能。Spring Boot同时还提供了多个Starter项目,拿来即可用,极大地简化了编程任务。
它提供了四个主要的特性,能够改变开发Spring应用程序的方式:
在进入主题之前,首先来看看微服务,简单说来就是将原本单个独立的大系统拆分为分布式的多个小型的服务,这些小型服务各自独立运行,他们通过HTTP和RestFul API进行通信。
一个微服务一般完成某个特定的功能,比如下单管理、客户管理等等。每一个微服务都是微型六角形应用,都有自己的业务逻辑和适配器。一些微服务还会发布API给其它微服务和应用客户端使用。其它微服务完成一个Web UI,运行时,每一个实例可能是一个云VM或者是Docker容器。
微服务具有分布式系统的特性,如服务发现,负载均衡,故障转移,多版本,灰度升级,服务降级,分布式跟踪。
Spring Cloud是一套完整的分布式系统解决方案,它的子项目涵盖了所有实现分布式系统所需要的基础软件设施(包括配置管理、服务治理、智能路由、全局锁等等)。基于Spring Boot,Spring Boot做较少的配置,便可成为Spring Cloud中的一个微服务,使用Spring Cloud的开发者可以快速的启动服务或构建应用、同时能够快速和云平台资源进行对接,使得开发部署极其简单。
Spring Cloud专注于提供良好的开箱即用经验的典型用例和可扩展性机制覆盖:
总结了一大堆,感觉Spring Boot是趋势,毕竟效率是王道。然后就是Spring Data的各个项目,因为如今的数据源是越发的丰富。最后,近几年微服务的概念挺火的,所以Spring Cloud也要多多了解。
如果你也想在IT行业拿高薪,可以参加我们的训练营课程,选择最适合自己的课程学习,技术大牛亲授,7个月后,进入名企拿高薪。我们的课程内容有:Java工程化、高性能及分布式、高性能、深入浅出。高架构。性能调优、Spring,MyBatis,Netty源码分析和大数据等多个知识点。如果你想拿高薪的,想学习的,想就业前景好的,想跟别人竞争能取得优势的,想进阿里面试但担心面试不过的,你都可以来,群号为:575745314
注:加群要求
1、具有1-5工作经验的,面对目前流行的技术不知从何下手,需要突破技术瓶颈的可以加。
2、在公司待久了,过得很安逸,但跳槽时面试碰壁。需要在短时间内进修、跳槽拿高薪的可以加。
3、如果没有工作经验,但基础非常扎实,对java工作机制,常用设计思想,常用java开发框架掌握熟练的,可以加。
4、觉得自己很牛B,一般需求都能搞定。但是所学的知识点没有系统化,很难在技术领域继续突破的可以加。
5.阿里Java高级大牛直播讲解知识点,分享知识,多年工作经验的梳理和总结,带着大家全面、科学地建立自己的技术体系和技术认知!
6.小号或者小白之类加群一律不给过,谢谢。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/157056.html原文链接:https://javaforall.cn