一款轻量级JavaWeb框架
在学会使用Spring之后,会搭建个人博客与小型项目。总觉得哪里好像缺少了点什么。 在看了《从零开始写Web框架》之后,决心自己也要实现一个自己的框架,有了框架的经验,再去了解Spring,SpringBoot以及 Mybatis等原理,就会得心应手。
- webmvc 主要实现以下功能
@Controller
public class UserController{
@Inject
UserService userService;
@Action("get:/user/list")
public View userList(){
return new View("user-list.jsp");
}
@Action("post:/user/create")
public Data userCreate(){
return new Data("");
}
}
- Bean 模块 smart4j-framework-bean
- AOP 模块 smart4j-framework-aop
- MVC 模块 smart4j-framework-mvc
- Data 模块 smart4j-framework-data
- Utils 模块
1.1 ConfigConstant及其子类XXConfigConstant 定义了模块的配置信息 1.2 PropUtils 加载配置文件 1.3 AbstractConfigHelper及其子类XXConfigHelper 根据模块来获取对应的配置文件信息 1.4 ClassUtils 根据包名将对应包下的类加载 1.5 AbstractClassHelper 返回base_package下的所有类
2.1 子类BeanClassHelper返回所有带有@Bean注解的类 2.1 定义依赖注入的注解@Inject,@Bean 2.2 创建反射工具类 根据类名得到对象,以及根据类名创建对象与设置对象属性 2.3 BeanHelper 负责维护IoC容器Map<Class<?>,Object> 2.4 实现依赖注入 实现步骤: 遍历所有的包下的类,当存在@Inject注解时,从BeanHelper中根据类名或者实现类来进行注入 但接口类型需要到MVC层去实现注入
MVC需要加载对应的@Service和@Controller注解加入beanMap
将带有@Service注解的类所实现的接口作为key,实现类为value, 放入Bean_Map 将ServiceClassSet中的实现类遍历, 得到每一个对应的接口列表,将每一个接口类,与这个对象形成对应的映射关系,放入Bean_Map中
MVC提供了3个注解
- @Controller 负责标注哪个类是Controller
- @Action
- @Service
新增了Handler和Request对象 Handler 维护了 Controller 和 对应的处理方法 Request 维护了请求路径和请求方式
工具类: ControllerHelper
关键之处在于把Mvc的Service Controller 得到的Bean_Map 调用 Bean的启动类
定义统一的DispatchServlet 来完成统一的转发操作