利用spring AOP和Annotation来简化DAO实现(三)
// }
public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
MyDao myDao = (MyDao) new ClassPathXmlApplicationContext("bean.xml").getBean("mydaobean");
List
System.out.println(list);
// System.out.println(myDao.toString());
// MyDao myDao1 = (MyDao) Class.forName("mySpringWeb.MyDaoImpl").newInstance();
// Method[] methods = myDao1.getClass().getMethods();
// for(Method method: methods){
// Annotation[] annos = method.getAnnotations();
// for(Annotation anno: annos){
// System.out.println(anno.getClass().getName());
// }
// }
}
}
输出:
MyDaoAnnotataion
query
@mySpringWeb.DaoParam(name=param1)
@mySpringWeb.DaoParam(name=param2)
{param1=test1, param2=1}
[MyDaoAnnotataion]
这种方式就可以简化DAO实现的一堆重复逻辑,通过在DAO 的interface中annotation定义好就可以了。
不过有个优化,不知道有没有办法不用定义每一个DAO的空实现类,应该是有办法的。具体的后面再研究。还有annotation如果直接通过invocation.getMethod().getAnnotation()是获取不到接口中定义的annotation的,必须得通过AnnotationUtils.findAnnotation(invocation.getMethod(), Dao.class);这个方法查询方法的annotation。