核心配置web.xml,也可以说是入口

手写迷你版SpringMVC框架_maven

可以看得出DispatcherServlet很重要,所以我们得自己手写一个自己的DispatcherServlet。

整个工程目录:

手写迷你版SpringMVC框架_maven_02


源码下载地址:

https://github.com/sunmutian/springmvc4tian

由于贴代码会导致样式难堪,所以建议直接去githup下载代码

自定义注解




手写迷你版SpringMVC框架_maven_03

  类似的定义:



手写迷你版SpringMVC框架_mvc_04



手写迷你版SpringMVC框架_spring_05



手写迷你版SpringMVC框架_spring_06

手写迷你版SpringMVC框架_spring_07


自定义的DispatcherServlet代码:




手写迷你版SpringMVC框架_mvc_08

手写迷你版SpringMVC框架_spring_09


手写迷你版SpringMVC框架_maven_10

手写迷你版SpringMVC框架_mvc_11

手写迷你版SpringMVC框架_mvc_12

手写迷你版SpringMVC框架_spring_13

import com.tian.springmvc.annotation.Repository;
import com.tian.springmvc.dao.DemoDao;

/**
 * <p>
 * 模拟dao的实现
 *
 * @Author tianweichang
 * @Date 2018-08-08 10:45
 **/
@Repository("demoDao")
public class DemoDaoImpl implements DemoDao {
@Override
    public void insert() {
        System.out.println("dao==============");
    }
}
public interface DemoDao {
void insert();
}
import com.tian.springmvc.annotation.Qualifier;
import com.tian.springmvc.annotation.Service;
import com.tian.springmvc.dao.DemoDao;
import com.tian.springmvc.service.DemoService;

/**
 * <p>
 * 模拟service实现类
 *
 * @Author tianweichang
 * @Date 2018-08-08 10:46
 **/
@Service("demoService")
public class DemoServiceImpl implements DemoService {
@Qualifier("demoDao")
private DemoDao demoDao;

@Override
    public void insert() {
        System.out.println("service start-------------------");
demoDao.insert();
        System.out.println("service end-------------------");
    }
}
/**
 * 模拟serivce
 * @Author tianweichang
 * @Date 2018-08-08 10:45
 **/
public interface DemoService {
void insert();
}


import com.tian.springmvc.annotation.Controller;
import com.tian.springmvc.annotation.Qualifier;
import com.tian.springmvc.annotation.RequestMapping;
import com.tian.springmvc.service.DemoService;

/**
 * 使用自定义的注解来模拟实现Spring中的SpringMVC
 *
 * @Author tianweichang
 * @Date 2018-08-08 10:39
 **/
@Controller("demo")
@RequestMapping("/demo")
public class DemoController {

@Qualifier("demoService")
private DemoService demoService;

@RequestMapping("/hello")
public String hello() {
        System.out.println("invoke DemoController hello ");
demoService.insert();
return "invoke Success";
    }
}

pom.xml

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.tian</groupId>
<artifactId>TianSpringMVC</artifactId>
<version>1.0-SNAPSHOT</version>

<name>TianSpringMVC</name>
<!-- FIXME change it to the project's website -->
    <url>http://www.example.com</url>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>

<dependencies>
<dependency>
<groupId>org.eclipse.jetty.aggregate</groupId>
<artifactId>jetty-all</artifactId>
<version>9.0.0.v20130308</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-jsp</artifactId>
<version>9.0.0.v20130308</version>

</dependency>
</dependencies>

<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.3.7.v20160115</version>
<configuration>
<httpConnector>
<port>8091</port>
<host>localhost</host>
</httpConnector>
<scanIntervalSeconds>1</scanIntervalSeconds>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>