使用SLF4J和Logback

前面介绍了Commons Logging和Log4j这一对好基友,它们一个负责充当日志API,一个负责实现日志底层,搭配使用非常便于开发。 有的童鞋可能还听说过SLF4J和Logback。这两个东东看上去也像日志,它们又是啥? 其实SLF4J类似于Commons Logging,也是一个日志接口,而Logback类似于Log4j,是一个日志的实现。 为什么有了Commons Logging和Log
使用SLF4J和Logback

Class类

除了int等基本类型外,Java的其他类型全部都是class(包括interface)。例如: String Object Runnable Exception ... 仔细思考,我们可以得出结论:class(包括interface)的本质是数据类型(Type)。无继承关系的数据类型无法赋值: Number n = new Double(123.456); // OK String s = new
Class类

访问字段

对任意的一个Object实例,只要我们获取了它的Class,就可以获取它的一切信息。 我们先看看如何通过Class实例获取字段信息。Class类提供了以下几个方法来获取字段: Field getField(name):根据字段名获取某个public的field(包括父类) Field getDeclaredField(name):根据字段名获取当前类的某个field(不包括父类) Field
访问字段

调用方法

我们已经能通过Class实例获取所有Field对象,同样的,可以通过Class实例获取所有Method信息。Class类提供了以下几个方法来获取Method: Method getMethod(name, Class...):获取某个public的Method(包括父类) Method getDeclaredMethod(name, Class...):获取当前类的某个Method(不包括父类)
调用方法

调用构造方法

我们通常使用new操作符创建新的实例: Person p = new Person(); 如果通过反射来创建新的实例,可以调用Class提供的newInstance()方法: Person p = Person.class.newInstance(); 调用Class.newInstance()的局限是,它只能调用该类的public无参数构造方法。如果构造方法带有参数,或者不是public,就无法
调用构造方法

获取继承关系

当我们获取到某个Class对象时,实际上就获取到了一个类的类型: Class cls = String.class; // 获取到String的Class 还可以用实例的getClass()方法获取: String s = ""; Class cls = s.getClass(); // s是String,因此获取到String的Class 最后一种获取Class的方法是通过Class.forNa
获取继承关系

动态代理

我们来比较Java的class和interface的区别: 可以实例化class(非abstract); 不能实例化interface。 所有interface类型的变量总是通过某个实例向上转型并赋值给接口类型变量的: CharSequence cs = new StringBuilder(); 有没有可能不编写实现类,直接在运行期创建某个interface的实例呢? 这是可能的,因为Java标准
动态代理

使用注解

什么是注解(Annotation)?注解是放在Java源码的类、方法、字段、参数前的一种特殊“注释”: // this is a component: @Resource("hello") public class Hello { @Inject int n; @PostConstruct public void hello(@Param String name) { System.out.pri
使用注解