一、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系统,也能容易地架构大的分布式系统。
今天先到这了,明天见~~