21反射、动态代理、枚举、Filter
2018/10/08
1.反射
- Constructor
- Class类的newInstance()方法是使用该类无参的构造函数创建对象, 如果一个类没有无参的构造函数, 就不能这样创建了,可以调用Class类的getConstructor(String.class,int.class)方法获取一个指定的构造函数然后再调用Constructor类的newInstance("张三",20)方法创建对象
- Field
- Class.getField(String)方法可以获取类中的指定字段(可见的), 如果是私有的可以用getDeclaedField("name")方法获取,通过set(obj, "李四")方法可以设置指定对象上该字段的值, 如果是私有的需要先调用setAccessible(true)设置访问权限,用获取的指定的字段调用get(obj)可以获取指定对象中该字段的值
- Method
- Class.getMethod(String, Class...) 和 Class.getDeclaredMethod(String, Class...)方法可以获取类中的指定方法,调用invoke(Object, Object...)可以调用该方法,Class.getMethod("eat") invoke(obj) Class.getMethod("eat",int.class) invoke(obj,10)
2.动态代理
- 在Java中java.lang.reflect包下提供了一个Proxy类和一个InvocationHandler接口,通过使用这个类和接口就可以生成动态代理对象。
3.枚举
- 枚举概述
- 是指将变量的值一一列出来,变量的值只限于列举出来的值的范围内。
- 注意事项
- 定义枚举类要用关键字enum
- 所有枚举类都是Enum的子类
- 枚举类的第一行上必须是枚举项,最后一个枚举项后的分号是可以省略的,但是如果枚举类有其他的东西,这个分号就不能省略。建议不要省略
- 枚举类可以有构造器,但必须是private的,它默认的也是private的。
- 枚举类也可以有抽象方法,但是枚举项必须重写该方法
- 枚举在switch语句中的使用
4.Filter
- Filter创建步骤: 1.创建一个类实现javax.servlet.Filter接口 2.得写接口方法 3.在web.xml文件中配置Filter
- 注意:在Filter的doFiltFilter配置详解er方法内如果没有执行那么资源是不会被访问到的。
5.Filter配置详解
- 1.Filter基本配置介绍
<filter-name>filter名称</filter-name> <filter-class>filter类全名</filter-class> <filter-mapping> <filter-name>filter名称</filter-name> <url-pattern>映射路径</url-pattern> </filter-mapping>
- 2.关于url-pattern配置
- 1.完全匹配
- 要求必须以"/"开始.
- 2.目录匹配
- 要求必须以"/"开始,以*结束.
- 3.扩展名匹配
- 不能以"/"开始,以*.xxx结束.
- 1.完全匹配
- 3.关于servlet-name配置
- 针对于servlet拦截的配置 <servlet-name>配置
- 在Filter中它的配置项上有一个标签
- <servlet-name>它用于设置当前Filter拦截哪一个servlet。是通过servlet的name来确定的。
- 4.关于dispatcher配置
- 可以取的值有 REQUEST FORWARD ERROR INCLUDE
- 作用:当以什么方式去访问web资源时,进行拦截操作.
- 1.REQUEST 当是从浏览器直接访问资源,或是重定向到某个资源时进行拦截方式配置的 它也是默认值
- 2.FORWARD 它描述的是请求转发的拦截方式配置
- 3.ERROR 如果目标资源是通过声明式异常处理机制调用时,那么该过滤器将被调用。除此之外,过滤器不会被调用。
- 4.INCLUDE 如果目标资源是通过RequestDispatcher的include()方法访问时,那么该过滤器将被调用。除此之外,该过滤器不会被调用