# spring-fake **Repository Path**: NiceSoneC/spring-fake ## Basic Information - **Project Name**: spring-fake - **Description**: 基于java 的web mvc框架 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2019-05-13 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # SpringFake ![Logo](https://images.gitee.com/uploads/images/2019/0528/152914_57085942_1255563.png "logo.png") #### 介绍 基于java 的web mvc框架 ### 开坑动机 浑浑噩噩的大学只剩下一年了,感觉这几年过的太浪费了。 不能这样下去了,要开始好好学些。刚好这一学期有个JavaEE课程,干脆我就从这里开始,学习一下常用的框架,并尝试着实现出来。 于是有了这个面向学习编程的`Springfake` ### 介绍 >SpringFake(顾名思义,就是假的Spring框架) 是一款参考了spring,JFinal等优秀框架,再加上自己的一些想法而编写的一款门槛极低、拿来就用、简单、学习成本极低的框架。此框架可以给初学者非常容易的去体验Web开发。 同时源码中具有非常多的注释,阅读起来会非常的顺畅。 ### 用途 + 优势 1. SpringFake中有spring这个单词,可以用来混一个课程设计:) 2. 能够给新手最好的阅读源码体验 3. 遵循MVC架构,无使用难度 4. 零配置,没有烦人的xml文件 5. 集成了常用的功能 6. IOC部分有参考spring的部分,也有我自己对IOC的理解和实现 7. AOP部分抛弃了源spring的动态代理的实现方式,转而使用了FilterChain设计模式。抛弃了`Advice`、`AopProxy`等一系列学习成本非常高的概念。 8. 对于控制器的映射,不再用繁琐的xml文件去配置,只需注解就完事了 9. 能够简单使用插件模块对框架进行扩展 10. ORM框架和数据库连接池都是在我仓库里,注释多,易阅读 ### 快速开始 Maven项目 #### 导入依赖 ``` xml org.mao springfake 1.00 ``` #### web.xml加入固定配置 [查看详细固定配置](https://gitee.com/NiceSoneC/spring-fake/blob/master/forweb.xml) #### 配置项目属性文件 **`springfake.properties`** ``` properties # 项目的主包 sf_app=org.springdemo # 数据库连接字符串 sf_url=jdbc:mysql://localhost:3306/spring_fake?characterEncoding=utf8&serverTimezone=UTC # 数据库名 sf_name=root # 数据库密码 sf_pwd=123456 # 数据库引擎 sf_dirver=com.mysql.cj.jdbc.Driver # 使用哪种IOC模块,具体的种类以及区别等下会有详细说明 sf_ioc_class=org.mao.framework.ioc.container.MaoIOC # sf_ioc_class2=org.mao.framework.ioc.container.JsonIOC ``` #### 添加控制器 添加控制器的方式非常简单,只需要在类上添加`@SFController("/url")`就表示这个类是一个控制器了 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request 但要注意的是控制器必须放在`项目的主包`内,SpringFake才能扫描的到。 ``` java @SFController("/") public class IndexController extends Controller{ // 里面可以有具体操作的方法 } ``` #### 添加处理请求的方法 添加完控制器以后,再在控制器中创建处理请求的方法 只需要在对应的方法上添加`@RequestMapping("/xx")`注解即可 ``` java @SFController("/") public class IndexController extends Controller{ // 此时如果在浏览器地址栏输入 `/hello` 则会跳到index.html页面 @RequestMapping("/hello") public CommandResult index() { return ActionResult.view("/WEB-INF/view/index.html"); } } ``` #### 添加能够操作数据库的服务 1. 新建添加Model类,基础于Model即可,记得加上@Cake注解,表示当前类可被注入到其他地方,true表示当前Cake是单例 ``` java @Cake(true) public class SPUser extends Model{ public static final SPUser dao = new SPUser(); } ``` 2. 新建一个Service,记得加上@Cake注解,表示当前类可被注入到其他地方 3. 在Service中注入SPUser字段,要在字段上添加标注`@Cooker`表示当前字段有资格注入。 ``` java @Cake public class SPUserService { // 注入SPUser对象,无需关注创建的步骤,使用即可 @Cooker private SPUser userDao; // 直接使用!!舒服 public List findAll() { return userDao.query("SELECT * FROM sfake_user"); } } ``` #### 将服务注入到控制器中 ``` java @SFController("/") public class IndexController extends Controller{ @Cooker private SPUserService userService; // 此时如果在浏览器地址栏输入 `/hello` 则会跳到index.html页面 // 并打印所有用户信息 @RequestMapping("/hello") public CommandResult index() { System.out.println(userService.findAll()); return ActionResult.view("/WEB-INF/view/index.html"); } } ```