一、IOC框架设计
1.先弄个简单的IOC模块进行管理bean,无非就是CurrentHashMap<Clazz,ClassInfo<Object...(是否单例啊,分类之类的配置项目)>>的map管理,然后弄很多的工具方法,什么单例注入,多例注入,反射创建类,懒创建类。
2.也模仿spring弄个注解分类扫描,写个@IOCObject和@IOCControl注解全局反射注入。区分好普通的bean和Control bean,方便后续直接通过容器调用函数的
这里可以管理你的应用的运行,直接主线程设计一个MyIOC.Run();反正死循环卡死就行,如果要回收就用java的gc,咱们就不写销毁过程了。
一、网络层开发
1.使用java.net.ServerSocket类作为底层链接,这里我们就彻底依赖容器就完事了,我的消息直接依赖日期中的Control bean也就是被@IOCControl管理的类
2.然后做一个处理HTTP消息的类。这个你需要解析,具体就是先Split("\n"),第一行提取出来请求类型,url,协议。然后接下来的行数直到一个空行之前就是请求头了
HTTP消息体实际发出的示例:
GET /myre/sssx HTTP/1.1
Host: example.com User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Connection: keep-alive
{“QQT" : "dsdsds"}
全部打包成map转到Control就行,Control可以暴露一个Map参数,然后注解一个@RequestHeader来接收。
3.Body这块暴露一个接口IHTTPConvert暴露一个String转Hashmap<String,T>的接口方便注入Control中参数,这个类可以模仿MVC的HttpMessageConverter
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package org.springframework.http.converter;
import java.io.IOException;
import java.util.List;
import org.springframework.http.HttpInputMessage;
import org.springframework.http.HttpOutputMessage;
import org.springframework.http.MediaType;
import org.springframework.lang.Nullable;
public interface HttpMessageConverter<T> {
boolean canRead(Class<?> var1, @Nullable MediaType var2);
boolean canWrite(Class<?> var1, @Nullable MediaType var2);
List<MediaType> getSupportedMediaTypes();
T read(Class<? extends T> var1, HttpInputMessage var2) throws IOException, HttpMessageNotReadableException;
void write(T var1, @Nullable MediaType var2, HttpOutputMessage var3) throws IOException, HttpMessageNotWritableException;
}
4.组合起来,在核心的网络底层调用IOC容器中所有被你整理好的@IOCControl,并且做好通过字符串对比做转发,然后通过你的IHttpConvert(模仿MVC中的消息过滤机制)做好过滤。然后网络层的开发完毕
三、持久层开发
1.持久层开发我们模仿Mybatis,注入一个ConnectionPool,里面根据配置文件也好,属性也好配置好你需要的链接数量,反正你的构造方法这些链接要接好,因为我们容器不管理生命周期,GC的时候要用Object中的重写finalize断开链接就行。然后sql的话,假如要自动生成你可以使用分段生成比如这样MyIOC.get("Connectpool").select("aaa","xxx").from("xxx").where().eq("sss",value)这种流式编程可以让你的代码看上去更加简洁。
四、前端设计
前端就是h5,列表显示博客没什么好说的,然后做个区别用户,markdown编辑博客,弄个大的textarea ,然后做个按钮当用户选择图片的时候就弄个@虚拟地址@ 如果有@就用@@ 如果有@@就输@@@@就行。传到后端就差不多是这样
{
Txt:"你好我是一篇博客@img1@\n@@没有名字..."
img1:"sdajflkdaj.......skljsafkladskfjl==",
}
后端直接一手Base64转文件进数据库或者目录,这个java也有提供