maven 项目(四) spring集成springMVC开发统一接入API(准备工作:第一部分)
来源:互联网 发布:跑步防寒口罩推荐 知乎 编辑:程序博客网 时间:2024/06/14 21:26
第一部分:通过自定义Annotation,获取所有Controller的Url
1、自定义Annotation接口:
@Target({ ElementType.TYPE, ElementType.METHOD })@Retention(RetentionPolicy.RUNTIME)public @interface FunctionCode {String value();String descript();}
2、普通接口一般写法(知道为毛这么爱用接口吗:度娘一下):
public interface JdpushService { ApiResponse<HashMap<String,Object>> doJdpush(ApiRequest apiRequest) throws Throwable;}
2.1 在需要获取Url的Controller上加上自定义Annotation
@FunctionCode(value = "jdpush", descript = "推送相关API")@Servicepublic class JdpushServiceImpl implements JdpushService { @FunctionCode(value = "jdpush.doJdpush", descript = "推送处理接口") @Override public ApiResponse<HashMap<String,Object>> doJdpush(ApiRequest apiRequest) throws Exception { ApiResponse<HashMap<String,Object>> apiResponse =null; boolean flag=false; try { flag=Jdpush.SendPush("这是一条推送消息"); } if (flag==true) { apiResponse = new ApiResponse<HashMap<String, Object>>(RestResultEnum.SUCCESS, 1, hashMap); }else{ apiResponse = new ApiResponse<HashMap<String, Object>>(RestResultEnum.FAIL, 1, hashMap); } }catch (Exception ex){ ex.printStackTrace(); apiResponse=new ApiResponse<HashMap<String,Object>>(RestResultEnum.UNKNOW_ERROR); } return apiResponse; }
2.2 利用Java反射原理读取Annotation
public class SpringBeanProxy { private static ApplicationContext applicationContext; private static Map<String, Object> functionCodeBeanMap = new HashMap<String, Object>(); private static Map<String, Method> functionCodeMethodMap = new HashMap<String, Method>(); private static Map<String, String> functionCodeCatalogMap = new HashMap<String, String>(); private static Map<String, Map<String, String>> functionCodeListMap = new HashMap<String, Map<String, String>>(); //公共静态方法:项目启动。初始化加载Annotation的接口 public synchronized static void setApplicationContext(ApplicationContext arg0) {applicationContext = arg0;Map<String, Object> tempMap = applicationContext.getBeansWithAnnotation(FunctionCode.class);//读取注解beanif (tempMap != null && tempMap.size() > 0) {for (Map.Entry<String, Object> entry : tempMap.entrySet()) {Object bean = entry.getValue();FunctionCode beanFc = bean.getClass().getAnnotation(FunctionCode.class);//反射beanif (beanFc != null) {String beanFunctionCode = beanFc.value();//读取定义的值functionCodeBeanMap.put(beanFunctionCode, bean);functionCodeCatalogMap.put(beanFunctionCode, beanFc.descript());//构造目录结构Method[] methodArr = bean.getClass().getDeclaredMethods();//获取类或接口声明的所有方法if (methodArr != null && methodArr.length > 0) {Map<String, String> methodFunctionCodeMap = new HashMap<String, String>();for (Method method : methodArr) {FunctionCode methodFc = method.getAnnotation(FunctionCode.class);if (methodFc != null) {String methodFunctionCode = methodFc.value();functionCodeMethodMap.put(methodFunctionCode, method);//code对应方法methodFunctionCodeMap.put(methodFunctionCode, methodFc.descript());//code对应描述}}functionCodeListMap.put(beanFunctionCode, methodFunctionCodeMap);//code对应对象}}}} } public static Object getBean(String beanName) { return applicationContext.getBean(beanName); } public static Object getBeanByFunctionCode(String functionCode) { return functionCodeBeanMap.get(functionCode); } public static Method getMethodByFunctionCode(String functionCode) { return functionCodeMethodMap.get(functionCode); } public static Map<String, String> getFunctionCodeCatalogMap() { return functionCodeCatalogMap; } public static Map<String, Map<String, String>> getFunctionCodeListMap() { return functionCodeListMap; } }
注:以上代买的意义是讲Annotation的类和方法加载map中。
好处自然,就是在获取的时候不用再次加载;map作为类似缓存,方便取值;
这行代码以后将会出现:
public static Object getBeanByFunctionCode(String functionCode) {
return functionCodeBeanMap.get(functionCode);
}
0 0
- maven 项目(四) spring集成springMVC开发统一接入API(准备工作:第一部分)
- maven 项目(四) spring集成springMVC开发统一接入API(准备工作:第二部分)
- maven 项目(五) spring集成springMVC开发统一接入API--实现test接口
- MVC架构Maven项目(四)SpringMVC集成
- J2EE项目系列(三)--Spring Data JPA+Spring+SpringMVC+Maven快速开发(2)多个第三方服务端接入之云旺IM
- Mybatis开发--SpringMVC-Mybatis-Maven项目整合(四)
- Spring+SpringMVC+Mybatis配置(Maven项目)
- Shiro权限控制框架 ---SpringMVC+Spring+My batis+Mysql+Maven集成开发Web项目
- 四、maven项目搭建 springmvc+ spring + mybatis(ssm框架搭建完成)
- 创建第一个grails项目(准备工作)
- 三、maven项目搭建 springmvc+ spring + mybatis(springmvc搭建)
- ActiveMq 自学(四) 集成SpringMvc+Spring框架
- eclipse 下搭建 maven项目。spring+springMvc+mybatise框架集成
- springmvc+spring+mybatis+maven项目集成shiro进行用户权限控制
- 项目Maven集成spring+springMVC所用jar包
- Spring+SpringMVC+Mybatis+Restful+Maven多模块项目集成
- maven项目springMVC+spring+mybatis集成,实现人员登陆
- J2EE项目系列(三)--Spring Data JPA+Spring+SpringMVC+Maven快速开发(1)项目架构
- Web Service原理
- MyBatis Generator 详解
- hdu 1054 Strategic Game(最小点覆盖)
- Spark:用Scala和Java实现WordCount
- 第十六章 模板与泛型编程
- maven 项目(四) spring集成springMVC开发统一接入API(准备工作:第一部分)
- Servlet 工作原理解析
- 哈理工oj/hrbust 1492 盒子【最大二分匹配】
- mybatis代码生成的几种方式
- iOS应用添加第三方支付
- 在VS中使用freeglut和glew的静态库
- Android Animation AS下动画实现
- Android ViewPager显示指定的fragment
- 查找Linux系统中的占用磁盘空间最大的前10个文件或文件夹