创建自定义注解
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface API {
String name() default "接口未被定义";
}
此注解可以使用在类和方法。
创建类扫描器
package com.core.component.api;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.springframework.web.bind.annotation.RequestMapping;
import com.core.annotation.API;
import com.core.util.ScanPackageUtil;
public class InterfaceURLScan {
private Map<String,String> pathMap;
public Map<String, String> getPathMap() {
return pathMap;
}
public void setPathMap(Map<String, String> pathMap) {
this.pathMap = pathMap;
}
public InterfaceURLScan(String packagePath){
try{
pathMap = new HashMap<String, String>();
List<String> list =ScanPackageUtil.scanPackage(packagePath);
for (Iterator iterator = list.iterator(); iterator.hasNext();) {
String string = (String) iterator.next();
Class<?> clazz = Class.forName(string);
RequestMapping classAnnotation=clazz.getAnnotation(RequestMapping.class);
Method[] methods = clazz.getDeclaredMethods();
for (Method method : methods) {
RequestMapping methodAnnotation = method.getAnnotation(RequestMapping.class);
API apiAnnotation = method.getAnnotation(API.class);
if(classAnnotation!=null && methodAnnotation!=null && apiAnnotation !=null){
System.out.println("接口描述:"+apiAnnotation.name());
System.out.println("接口路径:"+classAnnotation.value()[0]+methodAnnotation.value()[0]);
pathMap.put(apiAnnotation.name(), classAnnotation.value()[0]+methodAnnotation.value()[0]);
}
}
}
}catch(Exception e){
e.printStackTrace();
}
}
}
使用spring 管理扫描器
<!-- 扫描外部接口 -->
<bean id="interfaceURLScan" class="com.core.component.api.InterfaceURLScan">
<constructor-arg index = "0" value="com.biz.action.phone"/>
</bean>
创建外部接口
@API(name="测试")
@RequestMapping("/test")
@Transactional
public void test(){
}
启动时结果
接口描述:测试
接口路径:/phone/test/test