# 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

#### 介绍
基于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");
}
}
```