package net.tooan.ynpay.commons.service.ibatis; import com.ibatis.sqlmap.client.SqlMapClient; import net.tooan.ynpay.commons.ObjectFieldUtils; import net.tooan.ynpay.third.jfinal.log.Logger; import org.apache.commons.lang.StringUtils; import javax.interceptor.AroundInvoke; import javax.interceptor.InvocationContext; import java.lang.annotation.Annotation; import java.lang.reflect.Field; /** * Created with IntelliJ IDEA. * User: Jing * Date: 13-10-15 * Time: 下午9:15 */ public abstract class SqlMapClientInterceptor implements IbatisSupport { protected Logger logger = Logger.getLogger(this.getClass()); @AroundInvoke public Object inject(InvocationContext ctx) throws Exception { Object target = ctx.getTarget(); Class<?> clazz = target.getClass(); Field[] fields = ObjectFieldUtils.getAllField(clazz); for (Field field : fields) { if (field.getType().isAssignableFrom(SqlMapClient.class)) { if (logger.isDebugEnabled()) { logger.debug(String.format("%s.%s type is SqlMapClient", clazz.getName(), field.getName())); } for (Annotation annotation : field.getAnnotations()) { if (annotation instanceof IbatisClient) { if (logger.isDebugEnabled()) { logger.debug(String.format("%s.%s is IbatisClient Annotation", clazz.getName(), field.getName())); } if (!field.isAccessible()) { field.setAccessible(true); } SqlMapClient sqlMapClient = SqlMapClientUtils.getSqlMapClient(getDataSource(), StringUtils.isBlank(((IbatisClient) annotation).resource()) ? getResource() : ((IbatisClient) annotation).resource()); field.set(target, sqlMapClient); if (logger.isDebugEnabled()) { logger.debug(String.format("%s.%s set SqlMapClient", clazz.getName(), field.getName())); } break; } } } } return ctx.proceed(); } }