If class A is subclass of B, then B.isAssignableFrom(new A()) == true, and, new A().getClass() == B.class However, when you object is generated using proxy tool like CGLIB B.isAssignableFrom(new A()) == true, and, new A().getClass() != B.class http://www.systemmobile.com/wp/?p=189