冲刺第七天——技术总结篇

    本次团队作业是基于SpringBoot框架完成公文传输系统的搭建。Spring是当下主流Java Web开发框架,具有很高的凝聚力和吸引力,但对于Java Web基础薄弱的我们而言,Java Spring框架是陌生的,在学习实践过程中遇到了很多挫折。下面是我在学习过程中的一点点心得体会,不当之处敬请老师和同学们批评指正。

    一、Spring体系结构简析

    Spring 是分层的 Java SE/EE full-stack 轻量级开源框架,以 IoC(Inverse of Control,控制反转)和 AOP(Aspect Oriented Programming,面向切面编程)为内核,使用基本的 JavaBean 完成以前只可能由 EJB 完成的工作,取代了 EJB 臃肿和低效的开发模式。
在实际开发中,通常服务器端采用三层体系架构,分别为表现层(web)、业务逻辑层(service)、持久层(dao)。根据不同的功能被划分成了多个模块,这些模块大体可分为 Data Access/Integration、Web、AOP、Aspects、Messaging、Instrumentation、Core Container 和 Test,如下图所示:

        

    1. Data Access/Integration(数据访问/集成)

    数据访问/集成层包括 JDBC、ORM、OXM、JMS 和 Transactions 模块,具体介绍如下。

    • JDBC 模块:提供了一个 JDBC 的抽象层,大幅度减少了在开发过程中对数据库操作的编码。

    • ORM 模块:对流行的对象关系映射 API,包括 JPA、JDO、Hibernate 和 iBatis 提供了的集成层。

    • OXM 模块:提供了一个支持对象/XML 映射的抽象层实现,如 JAXB、Castor、XMLBeans、JiBX 和 XStream。

    • JMS 模块:指 Java消息服务,包含的功能为生产和消费的信息。

    • Transactions 事务模块:支持编程和声明式事务管理实现特殊接口类,并为所有的 POJO。

    2. Web 模块

    Spring 的 Web 层包括 Web、Servlet、Struts 和 Portlet 组件,具体介绍如下。

    • Web 模块:提供了基本的 Web 开发集成特性,例如多文件上传功能、使用的 Servlet 监听器的 IoC 容器初始化以及 Web 应用上下文。

    • Servlet模块:包括 Spring 模型—视图—控制器(MVC)实现 Web 应用程序。

    • Struts 模块:包含支持类内的 Spring 应用程序,集成了经典的 Struts Web 层。

    • Portlet 模块:提供了在 Portlet 环境中使用 MV C实现,类似 Web-Servlet 模块的功能。

    3. Core Container(核心容器)

    Spring 的核心容器是其他模块建立的基础,由 Beans 模块、Core 核心模块、Context 上下文模块和 Expression Language 表达式语言模块组成,具体介绍如下。

    • Beans 模块:提供了 BeanFactory,是工厂模式的经典实现,Spring 将管理对象称为 Bean。

    • Core 核心模块:提供了 Spring 框架的基本组成部分,包括 IoC 和 DI 功能。

    • Context 上下文模块:建立在核心和 Beans 模块的基础之上,它是访问定义和配置任何对象的媒介。ApplicationContext 接口是上下文模块的焦点。

    • Expression Language 模块:是运行时查询和操作对象图的强大的表达式语言。

    4. 其他模块

    Spring的其他模块还有 AOP、Aspects、Instrumentation 以及 Test 模块,具体介绍如下。

    • AOP 模块:提供了面向切面编程实现,允许定义方法拦截器和切入点,将代码按照功能进行分离,以降低耦合性。

    • Aspects 模块:提供与 AspectJ 的集成,是一个功能强大且成熟的面向切面编程(AOP)框架。

    • Instrumentation 模块:提供了类工具的支持和类加载器的实现,可以在特定的应用服务器中使用。

    • Test 模块:支持 Spring 组件,使用 JUnit 或 TestNG 框架的测试。

    二、团队作业技术路线

    (一)三层架构

    在Spring项目的实际开发中,通常服务器端采用三层体系架构,

    UI(表现层):主要是指与用户交互的界面。用于接收用户输入的数据和显示处理后用户需要的数据。

    BLL:(业务逻辑层):UI层和DAL层之间的桥梁实现业务逻辑。业务逻辑具体包含:验证、计算、业务规则等等。

    DAL:(数据访问层):与数据库打交道。主要实现对数据的增、删、改、查。将存储在数据库中的数据提交给业务层,同时将业务层处理的数据保存到数据库。(当然这些操作都是基于UI层的。用户的需求反映给界面(UI),UI反映给BLLBLL反映给DALDAL进行数据的操作,操作后再一一返回,直到将用户所需数据反馈给用户)

    (二)Entity实体层的应用    

    在我们的公文传输系统中,通过Entity(实体层)将以上三层加以整合。实体层贯穿于三层之间,每一层(UI>BLL>DAL)之间的数据传递(单向)是靠变量或实体作为参数来传递的,这样就构造了三层之间的联系,完成了功能的实现。在我们的系统中,实体层共包含9个类,分别是:BaseEntity(实现页面限制与数据权限管理功能)、SysFilesEntity(实现文件上传功能)、SysLog(实现日志操作功能)、SysPermission(实现菜单权限设置与管理)、SysRole(实现角色管理)、SysRoleDeptEntity(获取角色id与菜单控制权限id)、SysRolePermission(实现角色权限的管理)、SysUser(设置用户的相关信息)、SysUserRole(设置用户角色)。此外在Entity中,我们运用到了MyBatis持久层框架。

    (三)Controller组件

    负责调用适当的JavaBean或EJB组件来完成业务逻辑,以及调用适当的JSP文件来展示响应结果。对于简单的Web应用,Controller本身也可以完成业务逻辑。项目前后台交互共有两种方式,一种普通整体页面提交,比如form提交;另一种局部刷新,或者叫做异步刷新,ajax提交。@Controller就是整体页面刷新提交的处理注解;@RestController就是ajax提交,一般返回json格式。具体如下:

@Controller 处理http请求
@RestController Spring4之后新加的注解,原来返回json需要@ResponseBody配合@Controller
@RequestMapping 配置url映射

    在我们设计的公文传输系统中,共有名为:HomeController、IndexController、KaptchaController、PermissionController、RoleController、RolePermissionController、SysFilesController、UserController以及UserRoleController的9种Controller组件,每一类中封装了不同的方法。其中,通过@PostMapping设置访问路径,通过@Valid SysUser vo将接收前端的参数转换为对应的对象,通过DataResult.success方法包装返回的数据等。

    (四)Mybatis-Dao层下的Mapper接口

    Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同上边Dao接口实现类方法。

    Mapper接口开发需要遵循以下规范:

    • Mapper.xml文件中的namespace与mapper接口的类路径相同

    • Mapper接口方法名和Mapper.xml中定义的每个statement的id相同

    • Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql 的parameterType的类型相同

    • Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同

    (五)impl层

    impl层是继承service、dao层具体的实现类,通常处于controller层的service下,用来存放接口的实现类。在本系统中,为了更加清晰地显示各层各模块之间的功能,我们将impl独立出来,用于调用各类接口。

    (六)使用yml文件

    在本公文系统中,为了增强文件的可读性,我们使用yml文件来表达层次结构式的数据结构。yml(也叫yaml):是一种以数据为中心的配置文件, 比 json,xml 等更适合做配置文件。在resource文件夹下的application.xml文件中配置各个属性的值。

    (七)Thymeleaf

     Thymeleaf 是一个跟 Velocity、FreeMarker 类似的模板引擎,它可以完全替代 JSP ,通过下述方式引入依赖:

     

    三、系统效果

    登录注册界面:

    

    home界面:

    ·普通用户

    

    ·超级管理员:

        

posted on 2020-11-29 19:47  Judy_Zhu  阅读(130)  评论(0编辑  收藏  举报