import java.lang.reflect.Method;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
public class TestServiceImpl implements TestService,ApplicationListener<ContextRefreshedEvent> {
@Resource
LuruWordService luruWordService;
@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
System.out.println("------初始化执行 这里把所有的接口都遍历一遍 存到权限表里面----");
try {
// 获取上下文
ApplicationContext context = event.getApplicationContext();
// 获取所有beanNames
String[] beanNames = context.getBeanNamesForType(Object.class);
for (String beanName : beanNames) {
Controller conClass = context.findAnnotationOnBean(beanName,Controller.class);
//判断该类是否含有Controller注解
if (conClass != null) {
String [] classValue = null;
RequestMapping requestClass=context.findAnnotationOnBean(beanName, RequestMapping.class);
if(requestClass!=null){
classValue=requestClass.value();
}else{
classValue=new String[]{""};
}
Method[] methods = context.getBean(beanName).getClass().getDeclaredMethods();
for (Method method : methods) {
//判断该方法是否有RequestMapping注解
if (method.isAnnotationPresent(RequestMapping.class)) {
RequestMapping conMethod = method.getAnnotation(RequestMapping.class);
String remark = conMethod.name();
String[] value = conMethod.value();
// do something
System.out.println("注解方法:" + method.getName() + "," + remark+ "," +classValue[0]+value[0]);
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("完结");
}
}
在权限控制精准到每一个接口的时候 每写个接口都要数据库里面去新增一条记录,太过麻烦 程序启动的时候遍历所有的@Controller类 然后找@RequestMapping的方法 获取所有的接口信息 批量更新到数据库去