SpringMVC+Nutz框架介绍

合集下载

spring mvc框架介绍

spring mvc框架介绍

spring mvc 框架介绍
Spring MVC 简介
Spring MVC 框架是有一个MVC 框架,通过实现Model-View- Controller 模式来很好地将数据、业务与展现进行分离。

从这样一个角度来
说,Spring MVC 和Struts、Struts2 非常类似。

Spring MVC 的设计是围绕DispatcherServlet 展开的,DispatcherServlet 负责将请求派发到特定的handler。

通过可配置的handler mappings、view resoluTIon、locale 以及theme resoluTIon 来处理请求并且转到对应的视图。

Spring MVC 请求处理的整体流
程如图:
Spring3.x 中定义一个控制器类,必须以@Controller 注解标记。

当控
制器类接收到一个请求时,它会在自己内部寻找一个合适的处理方法来处理
请求。

使用@RequestMapping 注解将方法映射到一些请求上,以便让该方法
处理那些请求。

这种方法就像一般的类中的方法,方法名参数列表和返回值
并不像Struts2 之类的框架有很强的限制。

方法参数列表具体以及返回值具体
都有哪些,这里先不细说。

这篇博客的目的在于简单介绍如何快速上手使用Spring MVC 框架。

Spring框架详解

Spring框架详解

Spring框架详解Spring框架是一个开源的Java应用框架,适用于构建企业级Java应用程序。

它提供了一种综合的编程和配置模型,可以帮助开发者构建灵活、可扩展的应用程序。

本文将详细介绍Spring框架的核心特性和使用方法。

一、Spring框架的核心特性Spring框架提供了许多核心特性,下面将依次介绍。

1. 控制反转(Inversion of Control,IoC)控制反转是Spring框架的一大特色。

通过IoC容器,Spring将对象的创建、管理和依赖解析的控制权从应用程序代码中转移到配置文件中。

开发者只需要定义对象之间的依赖关系,Spring框架将负责创建和维护这些对象。

这种松耦合的方式使得应用程序更容易进行单元测试和扩展。

2. 依赖注入(Dependency Injection,DI)依赖注入是IoC的一个重要实现方式。

通过依赖注入,对象的依赖关系由外部的容器在运行时动态地注入到对象中,而不需要在代码中显式地进行依赖关系的创建。

Spring框架支持构造函数注入、Setter方法注入和字段注入等多种注入方式,方便开发者根据实际情况选择最合适的方式。

3. 面向切面编程(Aspect-Oriented Programming,AOP)Spring框架的AOP模块可以帮助开发者将横切逻辑(如日志记录、性能监控等)与业务逻辑分离。

通过定义切点和切面,开发者可以在不修改业务逻辑的情况下,将横切逻辑动态地织入到应用程序中。

4. 事务管理Spring框架提供了对事务的统一管理,支持声明式事务和编程式事务。

通过将事务管理交给Spring框架,开发者可以更方便地管理数据库和其他资源的事务操作,确保数据的一致性和完整性。

5. 集成其他框架Spring框架可以与其他流行的框架(如Hibernate、MyBatis、Struts 等)进行无缝集成。

通过提供一系列的集成模块和工具类,Spring框架简化了与其他框架的协作,提高了开发效率。

Struts、Spring、Hibernate三大框架的原理和优点

Struts、Spring、Hibernate三大框架的原理和优点

Struts的原理和优点.Struts工作原理MVC即Model—View—Controller的缩写,是一种常用的设计模式。

MVC 减弱了业务逻辑接口和数据接口之间的耦合,以及让视图层更富于变化。

MVC的工作原理,如下图1所示:Struts 是MVC的一种实现,它将Servlet和JSP 标记(属于J2EE 规范)用作实现的一部分。

Struts继承了MVC的各项特性,并根据J2EE的特点,做了相应的变化与扩展.Struts的工作原理,视图:主要由JSP生成页面完成视图,Struts提供丰富的JSP 标签库: Html,Bean,Logic,Template等,这有利于分开表现逻辑和程序逻辑。

控制:在Struts中,承担MVC中Controller角色的是一个Servlet,叫ActionServlet。

ActionServlet是一个通用的控制组件。

这个控制组件提供了处理所有发送到Struts的HTTP请求的入口点。

它截取和分发这些请求到相应的动作类(这些动作类都是Action类的子类)。

另外控制组件也负责用相应的请求参数填充Action From(通常称之为FromBean),并传给动作类(通常称之为ActionBean)。

动作类实现核心商业逻辑,它可以访问java bean 或调用EJB。

最后动作类把控制权传给后续的JSP 文件,后者生成视图。

所有这些控制逻辑利用Struts-config.xml文件来配置。

模型:模型以一个或多个java bean的形式存在。

这些bean分为三类:Action Form、Action、JavaBean or EJB.Action Form通常称之为FormBean,封装了来自于Client的用户请求信息,如表单信息。

Action通常称之为ActionBean,获取从ActionSevlet传来的FormBean,取出FormBean中的相关信息,并做出相关的处理,一般是调用Java Bean或EJB等。

SpringMVC+Nutz框架介绍

SpringMVC+Nutz框架介绍

SpringMVC+Nutz自主框架介绍一、框架概况基于经典技术组合(Spring MVC、Apache Shiro、Bootstrap UI)开发的企业级分布式基础开发平台,实现企业开发常用功能:组织机构、角色用户、权限授权、数据权限、内容管理、微信管理等。

使用的后台技术包括Spring、Spring MVC、Spring Cache、Nutz、Shiro、Jedis、Dubbo、RabbitMQ、Quartz、Elasticsearch、FastDFS、Ehcache、Beetl、Log4j等,前端技术包括Jquery、Bootstrap、Pjax等。

∙模块化可自由拆分(分布式可选择Dubbo/RSF实现)∙集成Shiro权限框架(支持二级缓存,通过Redis实现支持session同步) ∙集成Ehcache缓存(Shiro一级缓存)∙集成Jedis(redis的java实现,支持Redis集群模式和单机模式切换)∙集成Email服务(可选择启用)∙集成Quartz定时任务(支持集群部署)∙集成Beetl模板引擎(功能强大便捷)∙支持语言国际化(直接写汉字不需要Unicode转换,一种语言一个文件夹) ∙支持方法日志记录(@SLog注解自动记录日志)∙支持文件输出(@SFile注解自动输出文件,比如输出PDF格式)∙支持json输出(@SJson注解自动输出json字符串)∙支持自定义路由(显性转发或隐性转发)∙支持API Token及应用管理(Jwt实现token机制)∙后台管理界面采用Pjax+Bootstrap∙系统模块(单位、角色、用户、菜单等完整的权限体系)∙CMS模块(简易的内容管理功能)∙微信模块(支持多公众号、微信支付等功能)二、与xx框架对比分析1、Dao1)使用NutDao,简化数据库增删改查操作,天然的过滤非法字符,防止sql注入;2)兼容各类型数据库,只需对自定义SQL部分进行兼容性改造即可快速部署在MySQL、Oracle/达梦、MSSQL等各类数据库上;3)可通过实体类生成各类数据库的表结构、索引、序列或触发器等,支持动态分表,建立空白数据库启动项目时自动初始化表结构和数据;4)支持多数据源,并兼容hibernate、mybatis等其他第三方ORM 框架;2、Service1)Spring Cache方法缓存,对方法执行结果进行缓存,而非每条表数据,因为大部分业务是不需要用缓存的,比如后台的增删改查管理;以前项目中经常出现因为缓存嵌套的问题加上缓存更新不了造成的数据不一致问题;使用redis实现,支持自定义cachekey、cachename、可通过通配符清空部分缓存、可设置缓存失效时间等,并支持redis缓存的集群部署模式;2)增删改方法中手动添加事务注解,而非全局事务,在某些查询数据环节减少没必要事务操作,之前项目中出现因为事务回写,造成前台异常数据入库的情况;3、Controller1)@SJson注解,统一将执行结果转换为json字符串输出,统一的Result类,支持Vue等MVVM框架及前后端分离开发模式;此注解支持Jsonp格式输出;2)@SFile注解,方便的输出图片、文件、字节流等文件类型,通过@SFile(“pdf”)直接输出PDF文件;3)@Slog注解,统一且可扩展的日志体系,可根据需要记录时间、操作人、请求路径、输入参数、输出结果等,可将结果记录在数据库、mongodb或文件中;4)封装datatablesjs组件,后台分页查询使用起来非常简便,之前项目后台用到的分页组件及代码封装都做的非常固化且容错率低,做个高级查询开发一不小心就出错;4、权限体系1)基于shiro权限框架的深度改造,一级缓存使用ehcache实现性能更优,二级缓存使用redis实现持久化、session同步等功能;2)将菜单和数据权限有机的组合到一起,使权限分配操作更方便、开发更简便,通过shiro权限判断注解可实现按钮级、方法级权限控制;3)平台、商家、会员,三套独立的shiro验证体系,使平台权限可对管理员等后台人员进行无限级权限下放和管理,使商家可对店铺子帐号进行菜单和权限的无限级下放和管理,使会员中心也可做到按钮级权限控制;5、国际化语言1)深度改造SpringMVC国际化语言实现方式,实现一种语言一个文件夹,方便扩展更多语言;2)语言配置文件支持直接写汉字,不需要再做转换,开发便捷;6、配置文件1)PropertiesProxy类,可通过key获取任意一个properties配置文件的value,可通过其封装方法直接得到int、string等类型数据并支持默认值设置;2)同时系统后台提供“系统参数”管理,这些配置数据存储在数据库中,在项目启动时会加载的全局变量里(支持集群部署);7、文件池1)在一些业务场景中(如奇瑞人脸识别),需要下载图片存放到本地,这些文件不需要永久存储,处理过后需要删除,这个时候就是文件池的用武之地了,框架集成文件池功能,并可配置文件池的大小;8、FastDFS的集成1)FastDFS不需要单独安装个mysql,且性能优异;2)框架支持普通文件上传文件方式和FastDFS文件服务器上传方式的自由切换,看项目实际需要;9、Redis的集成1)RedisService一个封装好的服务类可调用redis所有功能;2)Spring Cache、Shiro二级缓存、RedisService使用同一个JedisAgent 来实现,当然也就都支持redis的单机模式或集群模式了;3)通过Redis的发布/订阅,框架集成实现了Websocket功能(虽然目前还没有项目用到);10、RabbitMq的集成1)系统参数、自定义路由、微信token,这些需要在Tomcat集群部署环境下保持一致的数据,是通过rabbitmq的FanoutExchange 实现的;2)商品下订单、商品数据同步ES,这些功能是通过rabbitmq的TopicExchange实现的;11、Beetl的集成1)Beetl的语法简单、容易上手、功能强大,简化了html开发的复杂度和时间,解放了生产力;2)在网站群项目中,Beetl自定义标签功能,可以用于编辑前台模板文件,来实现全静态页面的生成功能;12、开发效率提升1)代码生成器∙IDEA可视化插件,一键生成增删改查代码及多语言文件,可通过勾选选择要生成的内容;∙IDEA可视化插件和代码生成类是相对独立的两个项目,通过开发可以提供Eclispe可视化插件;2)调试工具∙在Debug模式下,可输出每个url执行耗时,方便性能调优;∙Logs工具类,使错误定位准确(以前项目报错很难找到什么地方报的错,现在一目了然),结合log4g可按日期或循环覆盖方式保存日志文件;3)工具类∙Strings类,集成众多常用的非空判断、是否手机号码、是否身份证、左右补位、空值转换等公共方法;∙Json类,可方便的将对象转为json字符串,或反向通过json转换为对象或集合,解析json非常方便;∙Lang类,常用的对象转map、map转对象、md5加密、sha1加密等;∙Http类,简易强大的网络请求工具,可方便的对接第三方API、实现网络爬虫等,可替换笨重繁杂的httpclient,在比价系统等项目有大量应用,极大的提高开发效率,这个丁传斌做face++接口的时候应该深有体会,繁杂的代码几行就搞定;∙Xmls解析类,对接微信支付接口或第三方通过xml包装数据的场合,通过此工具类可快捷的对数据进行解析、转换;∙其他;三、与xx电商平台对比分析功能上:1、商品规格汲取友商产品的经验,在商品分类、商品类型、商品规格等处做了优化改造,可以定义商品规格库,对不同类型的商品分配使用不同的规格;2、价格中心可对销售终端(PC/WAP/TV)、销售区域、销售对象、会员等级等分别设置销售价格;3、微信模块提供微信会员列表、自动回复、模板消息、群发消息等各类微信管理功能,同时通过微信支付API及JS API等功能;4、营销模块支持按销售终端、销售区域、销售对象、会员等级、满足的条件规则,分别设置销售策略,如满赠、满减、满包邮、满送优惠券等等;5、订单模块支持拆单、并单等,支持上传付款凭证、货到付款等;6、运费模板可配置按件数、按体积、按重量、按区域、按商品分类、按物流公司配置运费规则;7、系统管理模块单位、用户、角色、菜单及权限,分级分配缓存加载;性能上:1、订单系统将订单数据放入队列,有队列消费者进行订单处理,提升下订单流程;通过Redis主键生成器生成订单号,解决高并发及集群部署环境下订单号唯一性问题;2、商品数据同步ES商品增删改操作,会通知消息队列,由队列消费者进行ES数据同步,提高数据同步的实时性;附件:一、使用国产开源技术的优势1、学习成本低由于语言因素及目前互联网外网访问越来越难,国外技术学习成本越来越高,且“无人问,无人答”。

SpringMVC框架详解

SpringMVC框架详解

SpringMVC框架详解随着Web应用程序变得越来越复杂,使用适当的框架变得越来越重要。

SpringMVC是一个流行的Java Web框架,它提供了许多功能,使开发Web应用程序更容易和更快速。

本文将对SpringMVC框架进行详细介绍,包括其架构、工作流程、控制器、视图和模型等方面的内容。

1. SpringMVC架构SpringMVC框架基于Model-View-Controller(MVC)架构。

在这种架构中,应用程序被分为三个组件,分别是:1. Model:负责管理数据的处理和存储。

2. View:负责呈现数据给用户的界面。

3. Controller:负责接收用户的请求和处理数据,控制应用程序的行为。

SpringMVC通过DispatcherServlet实现了这种MVC架构。

DispatcherServlet是一个前端控制器(Front Controller),它接收所有的客户端请求并将其分配给相应的处理程序。

2. SpringMVC的工作流程SpringMVC框架具有以下的工作流程:1. 用户发送请求到DispatcherServlet。

2. DispatcherServlet收到请求后,根据配置文件中的URL映射找到相应的Controller。

3. Controller接收请求,并将数据传递给Service层。

4. Service层对数据进行处理,并将处理结果返回给Controller。

5. Controller根据视图解析器的配置选择相应的视图,将处理结果传递给视图并渲染。

6. 视图呈现处理结果,并将其返回给客户端。

3. SpringMVC的控制器控制器是SpringMVC架构中最重要的组件之一。

它负责接收客户端请求,并根据请求的类型执行相应的逻辑。

SpringMVC提供了以下几种类型的控制器:1. @Controller:该注解标注的类被SpringMVC视为控制器。

2. @RestController:可以理解为@Controller和@ResponseBody的组合注解。

什么是SpringMVC?

什么是SpringMVC?

什么是SpringMVC?⼀、什么是SpringMVC?1.SpringMVC 是⼀种基于 Java 的实现 MVC 设计模型的请求驱动类型的轻量级 Web 框架,属于SpringFrameWork的后续产品,已经融合在Spring Web Flow 中。

2.SpringMVC = Spring +MVCspring mvc类似于struts的⼀个MVC开框架,其实都是属于spring,spring mvc需要有spring的架包作为⽀撑才能跑起来.spring是⼀个⼀站式的框架,提供了表现层(springmvc)到业务层(spring)再到数据层(springdata)的全套解决⽅案;spring的两⼤核⼼IOC(控制反转)和AOP(⾯向切⾯编程)更是给我们的程序解耦和代码的简介提供了⽀持。

Spring框架图:从Spring的结构图可以看出,springMVC位于spring web端的⼀个框架,是⼀种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使⽤了MVC架构模式的思想,将web层进⾏职责解耦。

附:基于请求驱动指的就是使⽤请求-响应模型。

从名字上就可以窥探出,Spring>SpringMVC,那么事实上,spring和SpringMVC是⼀种⽗⼦关系。

SpringMVC是spring扩展出的⼀个应⽤于web端的框架。

在这⾥需要注意的⼀点,就是到底什么是⽗⼦容器关系:spring主要的作⽤是黏合其他模块组件,进⾏统⼀管理,springmvc则主要是负责web端。

那么,我们都知道,我们在应⽤spring的时候,可以使⽤注⼊。

这个时候,如果我们的web端是⽤的SpringMVC,这个时候,controller理论上是通过SpringMVC去注⼊,但是,使⽤spring注⼊,同样是可⾏的。

同理,service等层,使⽤SpringMVC配置的统⼀扫描装配也是可以的。

SpringMVC框架配置方法详解

SpringMVC框架配置⽅法详解本⽂实例为⼤家分享了Spring MVC框架配置⽅法,供⼤家参考,具体内容如下1、概述 Spring MVC 作⽤:⽤来实现前端浏览器与后⾯程序的交互 Spring MVC 是基于Spring 的MVC框架,所谓MVC(model,controller,view) ,整个Spring MVC 作⽤就是,基于Spring 将model(数据)在controller(后台程序) ,view(前端浏览器)之间交互 ⾄于Spring MVC优点缺点,了解不深不作评价,2、引⽤的jar包 既然是基于Spring那么 Spring的核⼼jar包(beans,context,core,expression,commons-logging)是必须的;Spring MVC的相关Jar包有个(web,webmvc),特别包(aop)这个包不是必须,但如果基于注解,⽤以包扫描的时候就必需3、配置⽂件 配置⽂件,就是显式配置程序执⾏的初始化的⽂件。

配置⽂件如下:springmvc-config.xml<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:context="/schema/context"xmlns:mvc="/schema/mvc"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans-4.3.xsd/schema/context/schema/context/spring-context-4.3.xsd/schema/mvc/schema/mvc/spring-mvc-4.3.xsd"><!--<context:component-scan base-package="com.itheima.controller"/>--><!-- 配置处理器Handle,映射“/firstController”请求 --><bean name="/firstController" class="com.itheima.controller.FirstController" /><!--<mvc:annotation-driven />--!><!-- 处理器映射器,将处理器Handle的name作为url进⾏查找 --><bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" /><!-- 处理器适配器,配置对处理器中handleRequest()⽅法的调⽤--><bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" /><!-- 视图解析器 --><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"></bean></beans>Web.xml<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="/xml/ns/javaee"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/javaee /xml/ns/javaee/web-app_3_1.xsd"version="3.1"><servlet><!-- 配置前端过滤器 --><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- 初始化时加载配置⽂件 --><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc-config.xml</param-value></init-param><!-- 表⽰容器在启动时⽴即加载Servlet --><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>/</url-pattern></servlet-mapping></web-app>图⽚来源()步骤:1、客户端发起访问,被Spring MVC的前端控制器拦截(DispatcherServlet ) 2、拦截器会找到映射器(handlerMapping),让映射器根据URL找到具体的bean,例如上⾯如果 URL"/firstController" 那么就找到了对应的Bean,并反馈给DispatcherServlet 3、DispatcherServlet将到找到的bean交给适配器(handlerAdapter),由适配器去调⽤对应的handler(执⾏bean中的⽅法) 4、执⾏完成后,将结果把返回给DispatcherServlet,然后由DispatcherServlet 交给视图解析器(ViewReslover) 5、视图解析完成后,再交给DispatcherServlet,然后交给view 渲染(⽐如 JSP)。

spring框架介绍以及简单使用

spring框架介绍以及简单使⽤Spring框架—控制反转(IOC)1 Spring框架概述1.1 什么是SpringSpring是⼀个开源框架,Spring是于2003 年兴起的⼀个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍⽣⽽来。

它是为了解决企业应⽤开发的复杂性⽽创建的。

框架的主要优势之⼀就是其分层架构,分层架构允许使⽤者选择使⽤哪⼀个组件,同时为 J2EE 应⽤程序开发提供集成的框架。

Spring使⽤基本的JavaBean来完成以前只可能由EJB完成的事情。

然⽽,Spring的⽤途不仅限于服务器端的开发。

从简单性、可测试性和松耦合的⾓度⽽⾔,任何Java应⽤都可以从Spring中受益。

Spring的核⼼是控制反转(IoC)和⾯向切⾯(AOP)。

简单来说,Spring是⼀个分层的JavaSE/EE full-stack(⼀站式) 轻量级开源框架。

1.2 Spring的优点⽅便解耦,简化开发(⾼内聚低耦合)Spring就是⼀个⼤⼯⼚(容器),可以将所有对象创建和依赖关系维护,交给Spring管理spring⼯⼚是⽤于⽣成beanAOP编程的⽀持Spring提供⾯向切⾯编程,可以⽅便的实现对程序进⾏权限拦截、运⾏监控等功能声明式事务的⽀持只需要通过配置就可以完成对事务的管理,⽽⽆需⼿动编程⽅便程序的测试Spring对Junit4⽀持,可以通过注解⽅便的测试Spring程序⽅便集成各种优秀框架Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts、Hibernate、MyBatis、Quartz等)的直接⽀持降低JavaEE API的使⽤难度Spring 对JavaEE开发中⾮常难⽤的⼀些API(JDBC、JavaMail、远程调⽤等),都提供了封装,使这些API应⽤难度⼤⼤降低1.3 Spring的体系结构2 ⼊门案例:(IoC)2.1导⼊jar包4 + 1 : 4个核⼼(beans、core、context、expression) + 1个依赖(commons-loggins…jar)2.2⽬标类提供UserService接⼝和实现类获得UserService实现类的实例之前开发中,直接new⼀个对象即可。

SpringMVC(思维导图)


@RequestMapping注解
@RequestMapping注解的位置
如果按上面的一个请求对应一个控制器方法来处理又会出现一个新问题,项目中 有很多模块,可能多个模块中都有一个list列表功能,那么就很尴尬
@RequestMapping注解的Value属性
@RequestMapping注解的value属性通过请求的请求地址匹配请求映射
SpringMVC简介
MVC是一种软甲架构思想,将软件按照模型,视图,控制器来划分
什么是MVC
M:Model,模型层,指工程中的JavaBean,作用是处理数据
JavaBean分为两类
V:View,视图层,指工程中的html或jsp等页面,作用是于用户进行交互,展示 数据
一类称为实体类Bean:专门存储业务数据的,如Studnet,User等
转发视图
SpringMVC中默认的转发视图是InternalResourceView
什么是SpringMVC
SpringMVC是Spring的一个后续产品,是Spring的一个子项目
SpringMVC是Spring为表述层开发提供的一整套完备的解决方案。在表述层框架 经历Strust,WebWork,Strust2等诸多产品的历代更迭之后,目前业界普遍选择了 SpringMVC作为JavaEE项目表述层开发的首选方案
域对象共享数据
使用map向request域对象共享数据
使用ModelMap向request域对象共享数据
Model,ModelMap,Map的关系
Model,ModelMap,Map类型的参数其实本质上都是BindingAwareModelMap 类型。Model是一个接口,Model是一个类,Map是一个接, ExtendedModelMap则继承ModelMap并实现了Model,而ModelMap继承了 LinkedHashMap,也就间接继承了LinkedHashMap;而 BindingAwareModelMap继承了ExtendedModelMap,也就说明 BindingAwareModelMap即可实例Map,也可以实例Model,ModelMap,所打印 类型结果都为BindingAwareModelMap

Java框架选型指南:Spring、Spring Boot和Spring MVC比较

Java框架选型指南:Spring、Spring Boot和Spring MVC比较引言:在现代软件开发中,选择合适的框架是非常重要的。

Java作为一种广泛应用的编程语言,有许多优秀的框架可供选择。

其中,Spring、Spring Boot和SpringMVC是Java开发中最为流行和常用的框架之一。

本文将对这三个框架进行比较,帮助开发者更好地选择适合自己项目的框架。

一、Spring框架:Spring框架是Java开发中最为流行的框架之一。

它提供了一个轻量级的容器,用于管理Java对象的生命周期和配置。

Spring框架的核心特点包括依赖注入(Dependency Injection)和面向切面编程(Aspect-Oriented Programming)。

1. 依赖注入(Dependency Injection):依赖注入是Spring框架的核心特性之一。

通过依赖注入,开发者可以将对象之间的依赖关系交由框架来管理,从而实现松耦合的设计。

这使得代码更加可维护和可测试。

2. 面向切面编程(Aspect-Oriented Programming):面向切面编程是Spring框架的另一个重要特性。

它允许开发者通过切面(Aspect)来将横切关注点(Cross-cutting Concerns)从核心业务逻辑中分离出来。

这样可以提高代码的模块化和可重用性。

二、Spring Boot框架:Spring Boot是Spring框架的扩展,旨在简化Spring应用的开发和部署。

它提供了一种约定大于配置的方式,使得开发者可以快速搭建和运行Spring应用。

1. 简化配置:Spring Boot通过自动配置(Auto-configuration)和起步依赖(Starter Dependencies)来简化应用的配置过程。

开发者只需要添加相应的依赖,Spring Boot就会自动配置应用所需的组件。

2. 内嵌服务器:Spring Boot内置了多种常用的Web服务器,包括Tomcat、Jetty和Undertow。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

SpringMVC+Nutz自主框架介绍一、框架概况基于经典技术组合(Spring MVC、Apache Shiro、Bootstrap UI)开发的企业级分布式基础开发平台,实现企业开发常用功能:组织机构、角色用户、权限授权、数据权限、内容管理、微信管理等。

使用的后台技术包括Spring、Spring MVC、Spring Cache、Nutz、Shiro、Jedis、Dubbo、RabbitMQ、Quartz、Elasticsearch、FastDFS、Ehcache、Beetl、Log4j等,前端技术包括Jquery、Bootstrap、Pjax等。

•模块化可自由拆分(分布式可选择Dubbo/RSF实现)•集成Shiro权限框架(支持二级缓存,通过Redis实现支持session同步)•集成Ehcache缓存(Shiro一级缓存)•集成Jedis(redis的java实现,支持Redis集群模式和单机模式切换)•集成Email服务(可选择启用)•集成Quartz定时任务(支持集群部署)•集成Beetl模板引擎(功能强大便捷)•支持语言国际化(直接写汉字不需要Unicode转换,一种语言一个文件夹)•支持方法日志记录(@SLog注解自动记录日志)•支持文件输出(@SFile注解自动输出文件,比如输出PDF格式)•支持json输出(@SJson注解自动输出json字符串)•支持自定义路由(显性转发或隐性转发)•支持API Token及应用管理(Jwt实现token机制)•后台管理界面采用Pjax+Bootstrap•系统模块(单位、角色、用户、菜单等完整的权限体系)•CMS模块(简易的内容管理功能)•微信模块(支持多公众号、微信支付等功能)二、与xx框架对比分析1、Dao1)使用NutDao,简化数据库增删改查操作,天然的过滤非法字符,防止sql注入;2)兼容各类型数据库,只需对自定义SQL部分进行兼容性改造即可快速部署在MySQL、Oracle/达梦、MSSQL等各类数据库上;3)可通过实体类生成各类数据库的表结构、索引、序列或触发器等,支持动态分表,建立空白数据库启动项目时自动初始化表结构和数据;4)支持多数据源,并兼容hibernate、mybatis等其他第三方ORM框架;2、Service1)S pring Cache方法缓存,对方法执行结果进行缓存,而非每条表数据,因为大部分业务是不需要用缓存的,比如后台的增删改查管理;以前项目中经常出现因为缓存嵌套的问题加上缓存更新不了造成的数据不一致问题;使用redis实现,支持自定义cache key、cache name、可通过通配符清空部分缓存、可设置缓存失效时间等,并支持redis缓存的集群部署模式;2)增删改方法中手动添加事务注解,而非全局事务,在某些查询数据环节减少没必要事务操作,之前项目中出现因为事务回写,造成前台异常数据入库的情况;3、Controller1)@SJson注解,统一将执行结果转换为json字符串输出,统一的Result类,支持Vue等MVVM框架及前后端分离开发模式;此注解支持Jsonp格式输出;2)@SFile注解,方便的输出图片、文件、字节流等文件类型,通过@SFile(“pdf”)直接输出PDF文件;3)@Slog注解,统一且可扩展的日志体系,可根据需要记录时间、操作人、请求路径、输入参数、输出结果等,可将结果记录在数据库、mongodb或文件中;4)封装datatables js组件,后台分页查询使用起来非常简便,之前项目后台用到的分页组件及代码封装都做的非常固化且容错率低,做个高级查询开发一不小心就出错;4、权限体系1)基于shiro权限框架的深度改造,一级缓存使用ehcache实现性能更优,二级缓存使用redis实现持久化、session同步等功能;2)将菜单和数据权限有机的组合到一起,使权限分配操作更方便、开发更简便,通过shiro权限判断注解可实现按钮级、方法级权限控制;3)平台、商家、会员,三套独立的shiro验证体系,使平台权限可对管理员等后台人员进行无限级权限下放和管理,使商家可对店铺子帐号进行菜单和权限的无限级下放和管理,使会员中心也可做到按钮级权限控制;5、国际化语言1)深度改造Spring MVC国际化语言实现方式,实现一种语言一个文件夹,方便扩展更多语言;2)语言配置文件支持直接写汉字,不需要再做转换,开发便捷;6、配置文件1)P ropertiesProxy类,可通过key获取任意一个properties配置文件的value,可通过其封装方法直接得到int、string等类型数据并支持默认值设置;2)同时系统后台提供“系统参数”管理,这些配置数据存储在数据库中,在项目启动时会加载的全局变量里(支持集群部署);7、文件池1)在一些业务场景中(如奇瑞人脸识别),需要下载图片存放到本地,这些文件不需要永久存储,处理过后需要删除,这个时候就是文件池的用武之地了,框架集成文件池功能,并可配置文件池的大小;8、FastDFS的集成1)F astDFS不需要单独安装个mysql,且性能优异;2)框架支持普通文件上传文件方式和FastDFS文件服务器上传方式的自由切换,看项目实际需要;9、Redis的集成1)R edisService一个封装好的服务类可调用redis所有功能;2)S pring Cache、Shiro二级缓存、RedisService使用同一个JedisAgent 来实现,当然也就都支持redis的单机模式或集群模式了;3)通过Redis的发布/订阅,框架集成实现了Websocket功能(虽然目前还没有项目用到);10、RabbitMq的集成1)系统参数、自定义路由、微信token,这些需要在Tomcat集群部署环境下保持一致的数据,是通过rabbitmq的FanoutExchange 实现的;2)商品下订单、商品数据同步ES,这些功能是通过rabbitmq的TopicExchange实现的;11、Beetl的集成1)B eetl的语法简单、容易上手、功能强大,简化了html开发的复杂度和时间,解放了生产力;2)在网站群项目中,Beetl自定义标签功能,可以用于编辑前台模板文件,来实现全静态页面的生成功能;12、开发效率提升1)代码生成器•IDEA可视化插件,一键生成增删改查代码及多语言文件,可通过勾选选择要生成的内容;•IDEA可视化插件和代码生成类是相对独立的两个项目,通过开发可以提供Eclispe可视化插件;2)调试工具•在Debug模式下,可输出每个url执行耗时,方便性能调优;•Logs工具类,使错误定位准确(以前项目报错很难找到什么地方报的错,现在一目了然),结合log4g可按日期或循环覆盖方式保存日志文件;3)工具类•Strings类,集成众多常用的非空判断、是否手机号码、是否身份证、左右补位、空值转换等公共方法;•Json类,可方便的将对象转为json字符串,或反向通过json转换为对象或集合,解析json非常方便;•Lang类,常用的对象转map、map转对象、md5加密、sha1加密等;•Http类,简易强大的网络请求工具,可方便的对接第三方API、实现网络爬虫等,可替换笨重繁杂的httpclient,在比价系统等项目有大量应用,极大的提高开发效率,这个丁传斌做face++接口的时候应该深有体会,繁杂的代码几行就搞定;•Xmls解析类,对接微信支付接口或第三方通过xml包装数据的场合,通过此工具类可快捷的对数据进行解析、转换;•其他;三、与xx电商平台对比分析功能上:1、商品规格汲取友商产品的经验,在商品分类、商品类型、商品规格等处做了优化改造,可以定义商品规格库,对不同类型的商品分配使用不同的规格;2、价格中心可对销售终端(PC/WAP/TV)、销售区域、销售对象、会员等级等分别设置销售价格;3、微信模块提供微信会员列表、自动回复、模板消息、群发消息等各类微信管理功能,同时通过微信支付API及JS API等功能;4、营销模块支持按销售终端、销售区域、销售对象、会员等级、满足的条件规则,分别设置销售策略,如满赠、满减、满包邮、满送优惠券等等;5、订单模块支持拆单、并单等,支持上传付款凭证、货到付款等;6、运费模板可配置按件数、按体积、按重量、按区域、按商品分类、按物流公司配置运费规则;7、系统管理模块单位、用户、角色、菜单及权限,分级分配缓存加载;性能上:1、订单系统将订单数据放入队列,有队列消费者进行订单处理,提升下订单流程;通过Redis主键生成器生成订单号,解决高并发及集群部署环境下订单号唯一性问题;2、商品数据同步ES商品增删改操作,会通知消息队列,由队列消费者进行ES数据同步,提高数据同步的实时性;附件:一、使用国产开源技术的优势1、学习成本低由于语言因素及目前互联网外网访问越来越难,国外技术学习成本越来越高,且“无人问,无人答”。

使用国产开源技术,可以加QQ群、作者QQ、社区网站,可以用中文交流,甚至自己都可以贡献代码。

比如beetl、fastdfs、t-io、nutz、node-wechat、thinkjs等,我都加了作者的QQ 或群,直接和作者交流问题,他们回答都非常及时,少走了很多弯路。

2、轻巧开发效率高由于思维方式的不同,国外的技术或框架很笨重,比如springmvc要实现某个功能需要引用一大堆其他的东西,自身对参数解析等支持方面思维较为落后(可能与出现的早有关)接收特殊格式参数等需要自己改造,连spring自己都出了个轻巧的spring boot。

国内开源项目多设计巧妙、灵活、简便,很多实现不会绕弯子,比如nutz一个框架解决几乎所有MVC问题,比如t-io解析socket数据包比netty方便的多,比如fastdfs不需要额外的安装维护mysql,比如大名鼎鼎的Druid一个框架解决几乎所有数据库连接问题,这就是中国人的思维,力求简单而强大的“聪明”思想。

还有dubbo等等。

3、稳定和迭代没有没有bug的技术,windows、linux、springmvc等等都会时不时的暴出bug,关键在于修复bug的速度。

例如框架里经常用到的nutz,从2012年开始就使用了,至今5个年头,老公司一直用它进行开发。

若发现bug可方便的联系作者,提交issue,修复非常快,同时合理的需求也可以提出来,及时得到支持。

4、发展国产开源技术会越来越多,好的框架和技术必定会越来越多、越来越强大,这是量变到质变的过程,有网络因素、安全因素等等方面。

二、长远计划一个好的开发框架,不是一成不变的,应该是紧跟时代的,特别是技术日新月异的今天。

相关文档
最新文档