Spring(一)300行代码手写Spring初体验
Mini版Spring实现思路
300行代码实现
代码目录结构
1、配置阶段
application.properties文件
// 扫描路径
scanPackage=com.test.demo
web.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<display-name>test Web Application</display-name>
<servlet>
<servlet-name>testmvc</servlet-name>
<servlet-class>com.test.mvcframework.v1.TestDispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>application.properties</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>testmvc</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
自定义注解
这里只举一个例子
package com.test.mvcframework.annotation;
import java.lang.annotation.*;
@Target({
ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface TestAutowired {
String value() default "";
}
DispatcherServlet,继承重写三个方法
doPost();
doGet();
init();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
try {
doDispatch(req, resp);
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
resp.getWriter().write("500");
}
}
@Override
public void init(ServletConfig config) throws ServletException {