死磕-Spring Boot(二)

简介: 死磕-Spring Boot(二)

一、Java EE的缺点

java EE的诞生,结束了Web开发的技术无序状态,让程序员,架构师可以用同一种思维去思考如何架构和开发应用。

但是java EE也有其局限性:

①、过于复杂:因为Java EE针对的是复杂的分布式企业应用,然而现实情况是大部分应用都比较简单,而且复杂的架构带来了复杂的开发方式和部署方式。

②、追求分布式:大部分应用并非都是Java EE假定的分布式系统,像EJB,JMS,JWS等技术实现门槛又高又容易出错。Spring曾经就反对这种分布式架构,所以只提供了容器管理,大型应用采用分布式架构不可避免,Spring提供了其他的技术支持,比如支持RESTFul架构。

③、不能及时与流行开源技术结合,比如消息处理,除了有标准的JMS支持。

但是性能更好的RabbitMQ和Kafka。JavaEE没有与之更好的相应的标准,反而是Spring,具有统一的实现消息处理模式,无论用的是JMS,RabbitMQ,还是Kafka,都能快速上手。

④、Java EE应用服务器通常都是由商业公司提供,价格不菲,少有公司采用,而且自学部署应用对初学者是有一定的门槛。

二、你真的理解Spring吗?

①、Spring是为了解决应用复杂性而产生的框架。

②、它吸取了Java EE容器管理的优点,提供了Ioc容器来管理Bean。

③、通过AOP方式来增强Bean的功能。

④、它并没有像Java EE那样详细规定容器提供的是何种服务和容器里运行的具体组件的类型。

⑤、Spring只提供了两种机制,控制反转(Ioc)和面向切面(AOP),来提供任意的服务和增强Bean的任意特性,使得Spring本身可以容易掌握,并且可以通过Bean管理来控制无限扩展功能。

三、Spring IOC容器和AOP

Spring框架如同Java EE一样,包含了企业应用需要的各种技术,Spring本身提供了两个最核心的技术-IOC容器和AOP增强,如下图所示:

IOC:Spring Container负责管理你的任意的对象,并结合你对对象的描述进行初始化和加强。

例如:

①、对于用一个注解@Controller声明的对象,Spring会认为这个对象是个Web Controller。

②、如果这个对象里的方法有@RequestMapping注解,则会将客户端发起的HTTP请求转化成Java方法调用。

③、在上面的例子中,Spring容器在初始化HelloWorldController实例后,对于客户端发起的/sayHello.html请求,会执行say方法,并自动将请求参数按照say方法声明的名称一一对应上。

④、Spring通常提供一些

@Controller,@Service,@Component,@Configuration注解,只有使用这些注解的类才会引起Spring容器的注意,并根据注解含义来管理和增强对象。

⑤、Spring可以管理和增强任意对象,如常见的@Service注解对象,通常都是用来处理业务逻辑,Spring容器往往会增强这类对象的事务控制能力。

⑥、容器管理还可以被管理的Bean提供其他被管理和被增强的Bean,如一个已经被@Service注解的UserService类,在HelloWorldController类中,使用@Autowired自动注入这个实例。

AOP:上面提到的对象增强离不开AOP技术。

AOP是指面向切面编程,通过预编译方式或者运行时刻对目标对象动态添加功能,AOP分离了企业应用的业务逻辑和系统级服务。

①、比如:事务服务,还有应用系统的审计,安全访问等功能代码

②、比如:实现用户访问控制,可以对每个Controller的方法使用一个自定义的注解@Function,用Spring AOP向Controller每个方法动态的添加用户权限校验功能,代码如下:

上面的注解@Function是自定义的注解,接受一个字符串,表示Controller方法对象的业务功能,用户能否访问到user.add这个功能,可以在数据库中配置。

③、使用AOP对所有的Controller进行增强,代码如下:

四、Spring的缺点

①、使用门槛高,要入门Spring需要较长的时间。

②、对过时的技术兼容,导致使用复杂度升高。

③、XML配置已经不再是流行的系统配置方式。

④、集成第三方工具的时候,程序员还需要考虑工具之间的兼容性。

⑤、系统启动的时候,不具备热部署功能,完全依赖虚拟机或者Web服务器的热部署。

五、Spring Boot的诞生

对于Spring的缺点,尤其是上手难,技术使用不统一的两个缺点,Spring的开发者们推出了Spring Boot的框架。Spring Boot能够快速开发Web系统,也能容易地架构大的分布式系统。


今天先到这了,明天见~~

相关文章
|
2月前
|
Java 应用服务中间件 数据库
死磕-Spring Boot(一)
死磕-Spring Boot(一)
死磕-Spring Boot(一)
|
2月前
|
NoSQL Java Redis
死磕-Spring Boot(三)
死磕-Spring Boot(三)
|
2月前
|
前端开发 Java 应用服务中间件
死磕-Spring MVC(一)
死磕-Spring MVC(一)
|
6月前
|
负载均衡 监控 Java
我把Spring Cloud的超详细资料介绍给你,面试官不会生气吧?geigei
我把Spring Cloud的超详细资料介绍给你,面试官不会生气吧?geigei
|
6月前
|
XML Java 数据格式
Spring学习__一篇足矣
Spring学习__一篇足矣
Spring学习__一篇足矣
|
XML 开发框架 前端开发
Spring MVC和Spring Boot有什么区别? 这样答,面试官直呼666
Spring MVC和Spring Boot有什么区别? 这样答,面试官直呼666
134 0
|
安全 Java 应用服务中间件
Spring Boot学习第二天
Spring Boot学习第二天
118 0
Spring Boot学习第二天
|
运维 前端开发 Java
一文弄懂 Spring WebFlux 的来龙去脉
本文将通过对 Reactive 以及相关概念的解释引出 Spring-WebFlux,并通过一些示例向读者解释 基于 Spring-WebFlux 如何进行反应式编程实践,同时会讨论相关技术的优缺点及技术原理。
|
SQL XML 前端开发
关于Spring Boot那些你不知道的真相!
spring的时候,带一下spring boot,有时候出去面试,也会问到spring boot,提的一个点,spring boot启动的时候一个流程图,本身他是spring这个项目发展到一定阶段之后的一个产物。
122 0
|
Dubbo JavaScript NoSQL
Spring Boot 都不懂,怎么跟面试官吹牛逼?
今天,正式介绍一下Java极客技术知识星球 SpringBoot 精髓之 SpringBoot-starter Spring 源码学习(八) AOP 使用和实现原理 Java:前程似锦的 NIO 2.0 java中List元素移除元素的那些坑
Spring Boot 都不懂,怎么跟面试官吹牛逼?