通过ApplicationContextAware 获取上下文信息,尤其是注解信息,直接上代码
import io.swagger.annotations.Api;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
@Component
public class SpringCxUtil implements ApplicationContextAware {
public static ApplicationContext get() {
return applicationContext;
}
}
/**
* 用于获取API注解上的信息,封装成map返回
*/
@Component
public class InitApi implements ApplicationRunner {
private static final Map<String,String> map=new HashMap<>();
@Override
public void run(ApplicationArguments args) throws Exception {
setMapList();
}
private void setMapList() {
Map<String, Object> beansWithAnnotation = SpringCxUtil.get().getBeansWithAnnotation(Api.class);
Class<? extends Object> clazz = null;
for (Map.Entry<String, Object> entry : beansWithAnnotation.entrySet()) {
clazz = entry.getValue().getClass();//获取到实例对象的class信息
Api api = clazz.getAnnotation(Api.class);
map.put(api.value(), api.tags()[0].replace("接口",""));
}
}
public Map<String,String> getMap(){
return map;
}
}
@Api(value = "testController", tags = { "测试接口" })
@RestController
@RequestMapping("/admin/test")
public class TestController {}