# jp-spring
**Repository Path**: accuser/jp-spring
## Basic Information
- **Project Name**: jp-spring
- **Description**: jp-spring是一个Spring-like MVC框架,来动手造一个Spring吧
- **Primary Language**: Java
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 8
- **Created**: 2017-01-24
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
### jp-spring是一个Spring-like MVC框架
> 一些名称为了方便熟悉直接从Spring那里拿来......
> 用了那么久Spring,也该动手模仿一下来加深理理解
Inspired by:
https://github.com/code4craft/tiny-spring
https://github.com/menyouping/jw
jp-spring目前有下面5个部分
- jp-ioc (负责bean的创建和注入,下面的模块都依赖这个核心。 核心的详解请看 这里 )
- jp-aop (AOP模块, 负责管理和创建Aspect,并对目标类进行织入)
- jp-orm (ORM模块,现在还没完成)
- jp-webmvc (MVC模块, 负责映射Request到Controller)
- jp-webtest (所有模块在这里都会具体例子)
**核心模块ioc, 请点 这里**
```java
@Component("helloService")
public class HelloService {
@Value("jdbc.driver")
private String text;
@Autowired
private OutputService outputService;
@Autowired
@Qualifier("outService-2")
private OutputService outputService2;
public void helloWorld(String text) {
outputService.output(text);
}
public void outPutHello(String text) {
outputService2.output(text);
}
}
```
**创建Controller**
详情请看 这里
```java
@Controller
public class TestController {
@Autowired
OutputService outputService;
public TestController() {
System.out.println("Hello I am TestController");
}
@RequestMapping(value = "/test/{one}", method = RequestMethod.GET)
public String test2(@PathVariable("one") Integer one, User user, @RequestParam("number") Float number) {
System.out.println(outputService);
outputService.output(one);
outputService.output(user);
outputService.output(number);
return "test";
}
@RequestMapping(value = "/test456465", method = RequestMethod.POST)
public String test() {
return "test";
}
}
```
**创建 Aspect**
具体介绍请看 AOP-README
```java
@Aspect
@Pointcut("execution(com.jp.controller.*.*())")
public class ControllerAspect {
private long begin;
@Before
public void before(TargetSource target) {
begin = System.nanoTime();
}
@After
public void after(TargetSource target) {
System.out.println("cost:" + (System.nanoTime() - begin));
}
}
@Aspect
@Pointcut("execution(com.jp.controller.*.test*())")
public class TestControllerAspect {
@Before
public void before(TargetSource target) {
System.out.println(target.getTargetMethod() + " begin");
}
@After
public void after(TargetSource target) {
System.out.println(target.getTargetMethod() + " end");
}
}
```
目前,我还没做到完全零配置,所以还是需要一些配置
1.web.xml
```xml
contextConfigLocation
/config/application.xml
jp.spring.web.context.ContextLoaderListener
DispatcherServlet
jp.spring.web.servlet.DispatcherServlet
1
DispatcherServlet
/
```
contextConfigLocation这个名字是规定, 对应的值就是配置文件的路径, “/”就是从根路径开始
2.application.xml
```xml
/*哪个包需要扫描,子目录也会扫描。为了方面,我直接从项目根目录开始*/
/*一个简单是视图处理,目前仅支持html和jsp*/
/*页面在哪个文件按*/
/*页面的扩展名*/
```
下一步我打算使用Annotation来代替XML, 然后只需配置一些属性放在 xxx.properties文件就行,例如数据库链接,需要的扫描的包,或者页面文件夹和扩展名等。
尽快实现
如果这个项目对你有帮助,可否留下一颗星星?