# small-mvc-framework **Repository Path**: karen_top/small-mvc-framework ## Basic Information - **Project Name**: small-mvc-framework - **Description**: 快速开发框架,使开发人员更加专注于业务,基于注解的Aop切面编程与Ioc依赖注入,继承了mvc设计思想,适用于中小型项目,后续会继续完善 - **Primary Language**: Java - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-09-10 - **Last Updated**: 2023-04-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: Java, MVC, ioc ## README # small-mvc-framework #### 基于small-mvc-framework开发的个人博客项目 项目后端登录地址:http://akitten.host/small-myblog/page/login.html 前端博客地址:http://akitten.host/small-myblog/page/lele.html #### 介绍 快速开发框架,不须xml等文件配置即可使用,使开发人员更加专注于业务,基于注解的Aop切面编程与Ioc依赖注入,继承了mvc设计思想,适用于中小型项目,后续会继续完善 #### 框架设计 ![模块设计](https://images.gitee.com/uploads/images/2020/0910/171550_7506ecae_5621977.png "mvc.png") #### 安装教程 1. 暂时没有放入maven仓库中,如果想使用可在本页面下载jar包,导入maven即可,百度有教程请自行搜索,后续有空了会放maven仓库中 2. 引入资源后在web.xml中配置Base拦截器即可,如下: ``` BaseInterceptor com.small.base.BaseInterceptor 1 BaseInterceptor /* ``` 3. 完成以上操作即可开发 #### 使用教程 1. 请求路径说明 请求匹配规则,支持rest风格请求,所有请求会被拦截,动态请求会去匹配controller静态请求会被输出 ``` $.ajax({ url : "PlatformName/Demo/User/userLogin", async : false, type : 'POST', data : json }) @Controller("Demo/User") public class UserController { public void userLogin(Context context){ ... } } ``` 说明:@Controller注解里的内容为"项目名/{content}/方法名"其中的content 2. Aop使用说明 摒弃了复杂的概念,减少学习成本,使用钩子方法实现增强 (1):定义切面 切面需要继承AspectProxy 可以实现切面工厂类中的钩子方法,通知业务逻辑就写在钩子方法中 ``` @Aspect public class TestAspect extends AspectProxy { @Override public void before(Method method, Object[] params) throws Throwable { System.out.println("before"); } } ``` 定义切面可使用的钩子方法有五种,开始增强begin()、前置增强before()、后置增强after()、异常增强error()以及最终增强end(),继承工厂类可自由选择需要使用的钩子方法,另外会有清除切面注解@Clear,使用它可以清除指定切面,以此达到个性化的使用 (2):定义切入点,在方法或者类上面使用@Pointcut注解,在其中传入切面类 ``` @Pointcut({TestAspect.class}) public class UserController { @Pointcut({TestAspect2.class}) void method1(){...} void method2(){...} @Clear({TestAspect.class}) void method3(){...} } ``` 如上所述method1会被TestAspect、TestAspet2两个切面横切,method2会被TestAspect一个切面横切,method3将不会被切面横切,可以看出方法会继承类注解中的切面,而@Clear会清除指定切面类,实现Aop其根本是方法级别的 3. Ioc注入 (1)使用@Inject可以注入类和接口 (2)注入接口需要传入指定实现类 ``` @Inject User user; //注入普通类 @Inject(UserServiceImpl.class) IUserService userService; //注入接口 ``` 如果在另一个类中使用了存在被横切方法的类则必须为这个类注入才可使用,也就是说必须交由Ioc容器管理 4. GlobalAspect全局切面 全局切面只对COntroller层有效,也就是说只有使用了@Controller注解的类才会被全局切面拦截,可用于token校验,系统级请求处理等 使用方法: (1)定义类使用@GlobalAspect注解,在其中传入int数字,不允许出现重复值,全局切面的执行顺序和此数据有关 (2)继承AspectProxy选择需要使用的钩子方法即可使用 注:如个别Controller中的方法不需使用,比如校验token中的登录方法,登录方法不能进行token判断,这时可以使用@Clear清除指定切面拦截器