day0801
- springmvc,ioc,io,反射,注解,maven
springmvc复习
-
核心组件:dispatcherServlet
-
复习sprinmvc的复习机制
-
思维:客户端发起服务请求–> 前端控制器(DispatcherServlet)–> 拿到请求去找handlermaping对象(k–v),找到handler–》返回DispatcherServlet–>去找适配器(handlerAdapter)–>执行handler对象的方法,返回值(ModelAndView)————》返回前端控制器–》去找视图解析器–>返回给DispaterServlet–》返回用户给响应
-
@Override 是重写方法,给我们当注释用的,并且如果方法名字修改了,那么会报错(其实就是当个注释用的)
Demo
package com.neuedu.mvc.framework.utils;
import com.neuedu.mvc.framework.Controller;
import com.neuedu.mvc.framework.Mapping;
import com.neuedu.mvc.framework.RequestMapping;
import java.io.File;
import java.lang.reflect.Method;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 描述 : MVC的工具类
*/
public class MVCUtil {
/**
* 根据包名,扫描包
* @param pack
* @return
*/
public static List<String> scanPackage(String pack){
List<String> classNames = new ArrayList<>();
//类加载器
ClassLoader loader = Thread.currentThread().getContextClassLoader();
// System.out.println("classLoader:"+loader);
//找到指定包下的资源
URL url = loader.getResource(pack.replace(".","/"));
//System.out.println("文件夹的名字:" + url);
File packDir = new File(url.getPath());
File[] files = packDir.listFiles();
for (File file : files) {
//System.out.println(file.getName());//文件名
String className = file.getName().substring(0, file.getName().lastIndexOf("."));
// System.out.println(pack+"."+className);//文件名
classNames.add(pack+"."+className);
}
return classNames;
}
/**
* 根据给定的类,查找是否包含@Controller注解
* @param classNames
* @return
*/
public static List<Class> scanController(List<String> classNames) throws ClassNotFoundException {
List<Class> classList = new ArrayList();
for (String className : classNames) {
//现在只知道类名, className
Class clazz = Class.forName(className);
//System.out.println(clazz);
//根据Class类型获取类的基础信息
boolean isController = clazz.isAnnotationPresent(Controller.class);
//System.out.println(className +" is Controller "+isController);
if(isController){
classList.add(clazz);
}
}
return classList;
}
/**
* * 根据类 Class 扫描 方法 有@RequestMapping
* *
* * url -- {
* * class
* * Method
* *
* * }
* @return
*/
public static Map<String, Mapping> handlerMapping(List<Class> controllers){
Map<String,Mapping> handlerMapping = new HashMap();
for (Class controller : controllers) {
// controller.getAnnotations() 所有注解
// controller.getDeclaredFields();// 类直接声明的属性
Method[] methods = controller.getDeclaredMethods();// 类声明的方法
System.out.println("类:"+controller.getCanonicalName());
for (Method method : methods) {
//System.out.println("\t"+method.getName());
boolean isRequestMapping = method.isAnnotationPresent(RequestMapping.class);
if(isRequestMapping){
//获取注解
RequestMapping rm = method.getAnnotation(RequestMapping.class);
//System.out.print("\t"+rm.value()+"---->");
handlerMapping.put(rm.value(),new Mapping(controller,method));
//System.out.println(handlerMapping);
}
}
}
return handlerMapping;
}
public static void main(String[] args) throws ClassNotFoundException {
String pack = "com.neuedu.controller";//待扫描的包
//1
List<String> classNames = scanPackage(pack);
//2 扫描Controller
List<Class> classList = scanController(classNames);
//3 根据Controller注册Url
Map handlerMappings = handlerMapping(classList);
System.out.println(handlerMappings);
}
}
- 注意还有自定义注解的开发,上面代码是为了了解一些工具类的使用
依赖的传递
- 就近原则和最短路径原则
- 最短路径原则: a->b->3.0
a->3.11
最短路径原则,选择a->3.11
a->b->3.11
a->b->3.10
就近原则,选择3.11
day下午
-
spring复习
-
maven jar包管理和项目构建工具
-
项目引入jar包是从本地仓库引入,如果本地仓库没有的话,
(有的话就引入),会去私服仓库,在去中央仓库去引入,setting.xml已经配置了私服仓库为阿里云(自己进行了配置),中央仓库在国外, -
一个项目引入另一个项目怎么引入?项目和项目直接没法引入,
有一个命令install,这个意思我把当前的项目打包并且发布到本地仓库,如果发布的话打成war包 -
本地仓库:
-
私服仓库:
-
中央仓库: