java注解Annotation
java的注解其实很常见,如@Override标记重载,@SuppressWarnings("unused")用过Eclipse的应该都知道。其实注解的本身并不做任何的操作,就像接口一样。注解的定义也特有意思[public @interface 注解名]是不是看起来很像接口。
现在的很多框架都用到了注解,如spring、jpa个人认为注解会让让程序看起来生涩难懂,但也正应为这样,也体现了编程中隐藏实现过程的这一思想。
虽然注解本身不做什么,但注解所配套的解析器会帮你完成一些事情,如属性的填充,其实原理很简单就用到了反射机制。下面是一个实现SqlMapClient实例填充到Dao层中的实例中的实现。
public static Map<String, Object> beanMap = new HashMap<String, Object>();public static void parse()throws Exception{String packageName = "com.sjw.lx.dao";String packagePath = packageName.replace(".", "/");String path = MyAnnotationParse.class.getClassLoader().getResource(packagePath).getPath();File f = new File(path);for(String s : f.list()){String className = packageName.concat("."+s.replace(".class", ""));Object obj = Class.forName(className).newInstance();Method[] methods = Class.forName(className).getMethods();for(Method m : methods){if(m.getAnnotation(FillSqlMap.class)!=null&&m.getName().startsWith("set")){m.invoke(obj, SqlMapSingle.getSqlMap());beanMap.put(className, obj);}}}}