午后星期午

使用Spring mvc 利用java的反射技术,来扫描对应包下的注解请求url 统一保存在数据库中

仅对  @requestMapping("/xxxx/其他参数")  的格式
 package cc.wshao.springmvc.util;
import java.io.File;
import java.lang.reflect.Method;
import java.net.URL;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import cc.wshao.springmvc.service.RightService;
public class RegRightUtils {
private static final String rootUrl = "/spring";
private static RightService rightService;
public static void main(String[] args) throws Exception {
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
  rightService = context.getBean(RightService.class);
ClassLoader classLoader = RegRightUtils.class.getClassLoader();
URL url = classLoader.getResource("com/er07/book/springmvc/controller");
String rootPath = url.getPath().toString();
File rootFile = new File(rootPath);
File [] files = rootFile.listFiles();
for(File f: files) {
System.err.println(f.getName());
String className = f.getName().substring(0, f.getName().indexOf(".class"));
Class clazz = Class.forName("com.er07.book.springmvc.controller."+className);
parseClass(clazz);  //解析  出url
}
 
}
public  static void parseClass(Class clazz) {
 
if(clazz.isAnnotationPresent(Controller.class)) {   //是否为一个controller ? 
String classUrl ="";
 if(clazz.isAnnotationPresent(RequestMapping.class)) {
 RequestMapping requestMapping_clazz = (RequestMapping) clazz.getAnnotation(RequestMapping.class);
  classUrl = requestMapping_clazz.value()[0];
  
  if(classUrl.equals("/")) {  //如果是"/" 的话  制空    
  classUrl ="";
  }
 }
 Method [] ms = clazz.getDeclaredMethods();
 
 for(Method m :ms) {
 
 if(m.isAnnotationPresent(RequestMapping.class)) {
 RequestMapping requestMapping_method = m.getAnnotation(RequestMapping.class);
 String methodUrl = requestMapping_method.value()[0];
 
   int  index = methodUrl.indexOf("/");
   index = methodUrl.indexOf("/",index+1);
   if(index!=-1) {  //如果存在 则进行截取前面的url 
   
    methodUrl = methodUrl.substring(0, index);
   }
 String resultUrl = rootUrl+classUrl+methodUrl;
 rightService.appendRightByUrl(resultUrl);
 }
 }
}
}
}
//实现方法: 
public void appendRightByUrl(String url) {
//查询 此url 在数据库中是否存在  此权限
String hql = "from Right where rightUrl =?";
Right r = (Right) this.rightDao.uniqueResult(hql, url);
if(r==null) { //不存在 , 插入数据库中
Right newRight = new Right();
newRight.setRightUrl(url);
this.saveOrUpdateRight(newRight);
}
}

posted on 2014-03-25 14:54 午后星期午 阅读(1235) 评论(0)  编辑  收藏 所属分类: JavaEE


只有注册用户登录后才能发表评论。


网站导航: