MyMVC框架功能描述

分层:

将包分为entity dao service action四层

每层中的类依次都有以下注解:

@BeanType(type=BeanTypeEnum.Entity)

@BeanType(type=BeanTypeEnum.Repository)

@BeanType(type=BeanTypeEnum.Service)

@BeanType(type=BeanTypeEnum.Controller)


自动装配bean:

1. 类信息包装类BeanClassWrapper:

功能

装载bean的属性,产生一个装配完毕的bean对象

查找方法(包括本类所有方法和父类public方法)

查找属性(包括本类所有属性和父类public属性)

获得bean注解

MyMVC框架功能描述_第1张图片

clazz:类Class

methodsMap :方法map,用于快速查找方法(包括本类所有方法和父类public方法)

fieldsMap:属性map,用于查找属性(包括本类所有属性和父类public属性)

fieldList:属性list,用于遍历属性(包括本类所有属性和父类public属性)

tableName:对应的数据库表名

beanType:bean类型注解,用于确定该包装器对应bean属于哪一层

2. 监听器 BeanLoader

当web应用启动的时候扫描src包下的所有子包,根据他们的beanType注解值来进行装配到BeanContainer中的静态MAP


如果是entity和controller,则保存相应的beanClassWrapper,每次需要就取出再用newInstance创建新的实体

如果是repository和service,则保存相应的dao和service bean对象,创建他们的bean对象,遍历其中的fieldList,若注解Autowired不为空,则根据field的名字调用BeanContainer的静态getbean方法,将相应的属性注入到bean,然后保存bean到Map

值得注意的是,在进行扫描装配时,要按entity-->dao-->service-->action的顺序,因为后面的bean会把前面的bean作为属性

至此,bean自动装配完毕


处理请求:controller层

路由配置文件:mvc.cfg.properties  :  url = clazz.method

中央分发器:DispatcherServlet

分发器拥有一个属性Properties prop,在init方法中进行初始化,将mvc.cfg.properties映射成prop对象

每次接收到请求时,导向到doPost方法中进行处理

1. 获取servletURI

1.5 将request response存入到BeanContainer中的静态MAP中

2.通过uri获取需要调用的类的类名和方法名

3.通过类名调用getBean获取相应的BeanClassWrapper

4.通过BCW获得装配好的bean

5.向装配好的bean中注入前端请求中的参数(parameterMap)

6.通过BCW获得需要调用的方法和Class

7.invoke调用相应的方法

8.根据action的返回,判断方法responseType(JSON TEXT STREAM VIEW)注解的值,进行相应的处理


Action类

通用属性在CommonAction中定义


MyMVC框架功能描述_第2张图片

page pageSize 分页信息

sortby order 排序信息


MyMVC框架功能描述_第3张图片

其他属性按照相应的实体类中的属性来定义,用于接收参数

分为 EQUAL  LIKE  RANGE 三种类型

分别代表精确匹配 模糊匹配 范围匹配

向service层传入action类this应用,根据action类的属性注解类型和值用反射技术自动生成增删查改sql语句

将service的返回封装成JSON对象返回给DispatcherServlet


Service层

仅拥有一个对应的dao对象,并带有autowired注解

调用相应的dao实现业务逻辑

根据dao的增删查改结果进行相应的业务逻辑处理,构造返回给action层


dao层继承CommonDao类

拥有一个beanClassWrapper对象

有getCurrentSession()方法获取DbSession类(类似JDBCTemplate)

DbSession对象绑定到了ThreadLocal

每个dao类都有增删查改方法,自动生成sql语句

在从数据库获取结果后,装配到entity视图类返回

查询方法在数据库的返回结果有两种类型,

一种是List视图实体列表;

一种是Map 单个视图实体

装配过程用反射技术,将map中属性装入到entity中


MyMVC框架功能描述_第4张图片



MyMVC框架功能描述_第5张图片

返回给service

你可能感兴趣的:(MyMVC框架功能描述)