jdk注解原理