1,ClassLoader.getResources(resource)方法取得“所有”符合指定的参数的资源。
如果指定的资源是个文件夹的话,并不是把文件夹下的所有文件和文件夹作为资源(URL)返回来,只是把这个文件夹做为资源返回来。如果要想取得这个文件夹下的所有文件和文件夹的话,需要通过这个返回的资源取得路径,再通过File类取得文件和文件夹。
还有一点,如果是在测试类中(Junit)使用这个方法的话,是先从测试路径下取得指定的资源,再从正常的源文件编译路径下取得资源。
例如:
如果指定资源为“com.myproject.abc”,测试类放在“test-classes”文件夹下,正常的编译类放在“classes”文件夹下,
使用ClassLoader.getResources(resource)的话,会返回下面两个资源:
1,D:/myproject/target/test-classes/com/myproject/abc
2,D:/myproject/target/classes/com/myproject/abc
2,Lambda表达式
用Lambda表达修改前:
File[] files = new File(packagePath).listFiles(new FileFilter() {
@Override
public boolean accept(File file) {
boolean acceptCondition = (file.isFile() && file.getName().endsWith(".class"))
|| file.isDirectory();
return acceptCondition;
}
});
修改后:
File[] files = new File(packagePath).listFiles((File file) -> (file.isFile() && file.getName().endsWith(".class")) || file.isDirectory());感觉简洁了不少。
3,如何写注解,和如何判断类,方法,属性上是否有注解。
cls.isAnnotationPresent(Service.class)
4,Apache提供了一些实现Ojbect的基本方法的工具类,例如:
EqualsBuilder:提供了实现equals()方法的工具方法
HashCodeBuilder:提供了实现hashCode()方法的工具方法。如果把一个对象当成Map的Key保存数据的场合,如果想在别的地方使用一个新建的对象(属性值和先前的对象都一样)做为Key,取出刚才保存的数据的话,就需要实现hashCode方法了。具体关于hashCode方法的作用一些注意点,请参文章:http://www.cnblogs.com/dolphin0520/p/3681042.html
5,Servlet3.0的一些知识点。
1),Tomcat7和8,在实现Servlet3.0容器时,提供了两个默认的Servlet,ServletName分别是“jsp”,“default”。前者是用来处理JSP的,后者来处理其它请求。
2),注册完Servlet后,可以使用servletContext.getServletRegistration()方法取得相对应的ServletRegistration。这个类主要是用来设置Servlet的Mapping的(就是Servlet对哪些路请求进行处理)。
关于1-3章做框架的总结:
1,做一个配置工具类,加载框架所需要的那个配置。
2,做一个类加载器(ClassUtil),这个类加载器的作用的是,把所有类都管理起来,等需要实例化或注入的时候,取出相应的类(Class类型),然后成生实例。
这里有一点要注意的是,这个类加载器是通过包路径,把class文件路径取到,然后使用Class.forName来把class文件加载到JVM中,并不立刻实例化。在需要的时候进行实例化。
3,再自定义几个我们需要用的注解Action,Controller(Inject应该不做用,用Java的就行)
4,再做Bean容器,这个步骤分为几个小步:
1),做个反射工具类,用Class类生成相应的实例
2),再做个BeanHelper,把Class类和相应的实例连接起来
5,再实现注入功能。注入功能就是把所有Bean容器中保存的实例和相应的Class类取出来,通过Class类看看哪个属性有@Inject注解,就对再从Bean容器中取出实例进行注入。
6,加载Controller,把Request的方法名和路径,还有Controller类和具体的Method组织起来。
1)定义Request类,这个类保存“请求方法”和“请求路径”
2)把和Request相对应的Controller的实例和Method类保存到Handler中。
(保存Method的原因是因为了快速取得请求路径所对应的Method,使用反射调用。
保存Controller实例的原因是因为,Method在被反射调用时,需要被传入被调用方法所属的实例)
7,做一个初始化类,把上面的实现都调用一下,把类加载进来(上面的很多实现都是写到了Static块里的,所以需要使用Class.forName来把类加载进来。只要类被加载到JVM时,才能调用Static块代码)
8,做一个Servlet,来处理所有请求,具体实现内容如下:
1)把HttpServletRequest中的请求参数都收集起来(getParameter的参数,和Body里的(如果是Post请求的话,参数是放到Body里的))
2)根据请求路径和请求方法,调用相应的Controller和方法。
3)根据返回返回类型,决定是调用JSP还是直接返回Json。