利用spring AOP和Annotation来简化DAO实现(二)
ame="param1")String param1, @DaoParam(name="param2")int param2) {
// TODO Auto-generated method stub
return null;
}
}
然后就是写一个spring AOP的 拦截器类了,
[java]
package mySpringWeb;
import java.lang.annotation.Annotation;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
import org.springframework.core.annotation.AnnotationUtils;
public class MyIntercept implements MethodInterceptor{
static{
try {
Class.forName("mySpringWeb.Dao");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public Object invoke(MethodInvocation invocation) throws Throwable {
Dao dao = AnnotationUtils.findAnnotation(invocation.getMethod(), Dao.class);//递归查找该方法是否定义了这个annotation
if(dao != null){
List list = new ArrayList();
list.add(dao.name());
System.out.println(dao.name());
//method name就是ibatis sqlid,这里可以注入一个dao,然后传入sqlid,执行返回
System.out.println(invocation.getMethod().getName());
Map paraMap = new HashMap();
Annotation[][] annotations = invocation.getMethod().getParameterAnnotations();
Object[] object = invocation.getArguments();
for(int i = 0; i < annotations.length;i++){
for(Annotation an: annotations[i]){
if(an.annotationType().isAssignableFrom(DaoParam.class)){
System.out.println(an.toString());
paraMap.put(((DaoParam)an).name(), object[i]);
}
}
}
//dao查询参数map
System.out.println(paraMap.toString());
//这里ibatis sqlid和查询参数map都知道,那么就可以进行数据库查询,然后返回了,对于返回类型也可以通过定义返回的annotation进行返回参数类型的几种定义
//当前这里需要注入spring的DAO的一个实现,这里根据annotation的类型和参数以及sqlid就可以进行数据库查询,然后返回,这里就比较简单了。
return list;
}
System.out.println("go to here error");
return null;
}
}
再进行spring的bean xml配置,bean.xml,这里可以对多个DAO进行配置同一个拦截器,然后就可以统一处理了。
[java]
< xml version="1.0" encoding="UTF-8" >
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/batch http://www.springframework.org/schema/batch/spring-batch-2.1.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">
写一个测试类:
[java]
package mySpringWeb;
import java.util.List;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MyTest {
// @Resource
// private MyDao myDao;
//
// public void test(){
// List
// System.out.println(list);