原文地址 作者: Jakob Jenkov 译者:叶文海(yewenhai@gmail.com)内容索引运用泛型反射的经验法则泛型方法返回类型泛型方法参数类型泛型变量类型我常常在一些文章以及论坛中读到说 Java 泛型信息在编译期被擦除(erased)所以你无法在运行期获得有关泛型的信息。其实这种说法并不完全正确的,在一些情况下是可以在运行期获取到泛型的信息。
原文地址作者: Jakob Jenkov 译者:叶文海(yewenhai@gmail.com)内容索引什么是注解类注解方法注解参数注解变量注解利用 Java 反射机制可以在运行期获取 Java 类的注解信息。什么是注解注解是 Java 5 的一个新特性。注解是插入你代码中的一种注释或者说是一种元数据(meta data)。
原文地址 作者: Jakob Jenkov 译者:叶文海(yewenhai@gamil.com)内容索引访问私有变量访问私有方法在通常的观点中从对象的外部访问私有变量以及方法是不允许的,但是 Java 反射机制可以做到这一点。使用这个功能并不困难,在进行单元测试时这个功能非常有效。本节会向你展示如何使用这个功能。
原文地址 作者: Jakob Jenkov 译者:叶文海(yewenhai@gamil.com)使用 Java 反射你可以在运行期检查一个方法的信息以及在运行期调用这个方法,使用这个功能同样可以获取指定类的 getters 和 setters,你不能直接寻找 getters 和 setters,你需要检查一个类所有的方法来判断哪个方法是 getters 和 setters。
原文地址 作者: Jakob Jenkov 译者:叶文海(yewenhai@gamil.com)内容索引获取 Method 对象方法参数以及返回类型通过 Method 对象调用方法使用 Java 反射你可以在运行期检查一个方法的信息以及在运行期调用这个方法,通过使用 java.lang.reflect.Method 类就可以实现上述功能。在本节会带你深入了解 Method 对象的信息。
原文地址 作者: Jakob Jenkov 译者:叶文海(yewenhai@gamil.com)内容索引获取 Field 对象变量名称变量类型获取或设置(get/set)变量值使用 Java 反射机制你可以运行期检查一个类的变量信息(成员变量)或者获取或者设置变量的值。通过使用 java.lang.reflect.Field 类就可以实现上述功能。在本节会带你深入了解 Field 对象的信息。
原文地址 作者: Jakob Jenkov 译者:叶文海(yewenhai@gamil.com)内容索引获取 Constructor 对象构造方法参数利用 Constructor 对象实例化一个类利用 Java 的反射机制你可以检查一个类的构造方法,并且可以在运行期创建一个对象。这些功能都是通过 java.lang.reflect.Constructor 这个类实现的。本节将深入的阐述 Java Constructor 对象。
原文地址 作者: Jakob Jenkov 译者:叶文海(yewenhai@gamil.
原文地址 作者: Jakob Jenkov 译者:叶文海(yewenhai@gamil.com)该系列文章中所描述介绍的是 Java 6 版本的反射机制。Java 反射的例子下面是一个 Java 反射的简单例子:Method[] methods = MyObject.class.getMethods();for(Method method : methods){ System.out.println("method = " + method.getName());
Java 反射机制可以让我们在编译期(Compile Time)之外的运行期(Runtime)检查类,接口,变量以及方法的信息。反射还可以让我们在运行期实例化对象,调用方法,通过调用 get/set 方法获取变量的值。Java 反射机制功能强大而且非常实用。
如果您希望基于某种模式生成特定格式的日志信息,可使用 org.apache.Log4j.PatternLayout 格式化您的日志信息。PatternLayout 继承自抽象类 org.apache.Log4j.Layout,覆盖了其 format() 方法,通过提供的模式,来格式化日志信息。PatternLayout 是一个简单的 Layout 对象,提供了如下属性,该属性可通过配置文件更改:序号属性 &
如果您希望以 HTML 格式输出日志文件,可使用 org.apache.Log4j.HTMLLayout 格式化日志信息。HTMLLayout 继承自抽象类 org.apache.Log4j.Layout,覆盖了其 format() 方法来提供 HTML 格式。它提供了如下信息以供显示:从应用启动到日志产生之间经过的时间。发起记录日志请求的线程名字。和记录日志请求关联的级别。logger 的名字和日志信息。
Log4j API 提供了 org.apache.Log4j.jdbc.JDBCAppender 对象,该对象可将日志信息记录到特定的数据库之中。JDBCAppender 配置属性描述bufferSize设置缓冲区大小,缺省为 1。driver以字符串形式设置驱动类,如果未设置,缺省为 sun.jdbc.odbc.JdbcOdbcDriver。layout设置 layout,缺省为 org.apache.Log4j.PatternLayout。password设置数据库密码。
使用 org.apache.Log4j.FileAppender 将日志记录到文件。FileAppender 配置FileAppender 拥有如下配置参数:属性描述immediateFlush该标志位默认为 true,意味着每次日志追加操作都将输出流刷新至文件。encoding可以使用任何编码,默认情况下使用平台相关的编码。threshold appender 对象的阀值。Filename日志文件名。
Apache Log4j 提供了多个 Layout 对象,每个根据布局的不同都可格式化日志数据。还可以创建一个 Layout 对象,以应用特有的方式格式化日志。所有 Layout 对象从 Appender 对象那里接收一个 LoggingEvent 对象,然后从 LoggingEvent 对象那里获取信息,并使用恰当的 ObjectRenderer 对象获取该信息的字符串形式。Layout 类型位于继承关系顶层的是抽象类 org.apache.Log4j.
org.apache.Log4j.Level 类定义了日志级别,您可通过继承 Level 类定制自己的级别。级别描述ALL所有级别,包括定制级别。DEBUG指明细致的事件信息,对调试应用最有用。ERROR指明错误事件,但应用可能还能继续运行。FATAL指明非常严重的错误事件,可能会导致应用终止执行。INFO指明描述信息,从粗粒度上描述了应用运行过程。OFF最高级别,用于关闭日志。
Logger 类提供了很多方法用来处理日志,Logger 类不允许初始化一个新的实例,但提供了两个静态方法用来获取 Logger 对象:public static Logger getRootLogger();public static Logger getLogger(String name);第一个方法返回应用实例没有名字的根日志。其他有名字的 Logger 对象通过传入日志的名字,调用第二个方法获得。
我们已经学会了如何创建配置文件,本章讲述如何生成调试信息,并将其写入一个简单的文本文件。下面是为我们的例子创建的一个简单配置文件,让我们再来复习一遍:定义根日志级别为 DEBUG,并将名为 FILE 的 appender 添加其上。appender FILE 定义为 org.apache.Log4j.FileAppender,它将日志写入 log 目录下一个名为 log.out 的文件中。
上一章解释了 Log4j 的核心组件。本章讲述如何使用配置文件来配置核心组件。Log4j 的配置包括在配置文件中指定 Level、定义 Appender 和指明 Layout。Log4j.properties 文件是 Log4j 的配置文件,属性以键值对的形式定义。默认情况下,LogManager 会在 CLASSPATH 中寻找 Log4j.properties 文件。根日志的级别定义为 DEBUG,并将名为 X 的 appender 添加其上。
Log4j API 采用分层架构,每一层有不同的对象,完成不同的任务。这种分层架构让设计变得灵活,且易于日后扩展。Log4j 里有两种类型的对象:核心对象:这是框架必需的对象,使用框架时必需用到它们。支持对象:这是框架的可选对象,它们支持核心对象做一些额外的,但并不重要的任务。
关注时代Java