git仓库地址:服务注册
前言
上一篇文章利用Spring扫描机制,实现服务的注册(一)完成主要类的介绍,那么这一篇博客用于介绍该注册方式的具体使用和一些其他相关知识的补充。
使用方法
- 业务成和持久层还是按照我们正常的开发流程走即可。
- 在需要注册的业务类进行注册到对应的Controller类即可完成。
代码实例
我这里使用了RealAuthController和RealAuthService进行模拟开发中对应的实例,而且为了考虑项目的扩展性,也将业务开始前环境的判断和业务处理后对业务处理结果进行了打印,可以满足不同项目的其他需求。
- RealAuthController
@RestController
@AutoDispatch(serviceInterface= {RealAuthService.class})
@RequestMapping("demo")
public class RealAuthController extends WelcomeController {
@RequestMapping(value="/{functionName:[a-zA-Z-]+}Auto", method= RequestMethod.POST)
public @ResponseBody
Object dipatch(HttpServletRequest request, HttpServletResponse response, @PathVariable("functionName") String name, @RequestBody Map<String, Object> model) {
return autoDispatch(request, response, name, model);
}
@RequestMapping(value="/{functionName:[a-zA-Z-]+}Auto", method=RequestMethod.GET)
public @ResponseBody Object dipatch2(HttpServletRequest request, HttpServletResponse response, @PathVariable("functionName") String name, @RequestParam Map<String, Object> model) {
return autoDispatch(request, response, name, model);
}
}
- RealAuthService
@Service
public class RealAuthService {
// 测试方法
public List getList() {
return Arrays.asList(1, 2, 3, 4);
}
// 测试方法前
public ResultVo pregetList() {
System.err.println("准备开始-----");
return new ResultVo("准备好了");
}
// 测试方法后
public ResultVo postgetList(List list) {
System.err.println(list);
System.err.println("打扫现场-----");
return new ResultVo("执行完毕");
}
}
- ApplicationConfig类,要在启动类里面声明metaDataManager扫描的包是controller包
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class,args);
}
@Bean
MetaDataManager metaDataManager() {
return new MetaDataManager(new String[] {"com.aaa.demo.controller"});
}
}
- 上文漏掉了一个获取Spring管理的bean对象的工具类
@Component
public class ServiceLocator implements ApplicationContextAware {
private static ApplicationContext applicationContext = null;
@Override
// 获取ApplicationContext对象
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
ServiceLocator.applicationContext = applicationContext;
}
/**
* @Title: getBeanByName
* @Description: 通过bean的名字来获取Spring容器中的bean
* @param beanName
* @return: Object
*/
public static Object getBeanByName(String beanName) {
if (applicationContext == null){
return null;
}
return applicationContext.getBean(beanName);
}
public static <T> T getBean(Class<T> type) {
return applicationContext.getBean(type);
}
}
流程和注意点
- 流程
根据自己配的端口:访问/demo/getListAuto即可获取到返回的json对象:
[1,2,3,4]
控制台会打印出,业务开始前的检查和业务结束后的操作:
准备开始-----
[1, 2, 3, 4]
打扫现场-----
- 注意点
1.get请求的问题,下面三行代码多余
WelcomeController里面的方法有这么一行代码:
if(request.getMethod().equalsIgnoreCase("GET")) {
//model = request.getParameterMap();
}
这是之前公司项目上线的的代码,后来我发现get请求跑不通,后来认识学习了@RequestParam 注解后,知道该注解是将get请求和正常的表单请求的数据自动封装成了map对象,所以会出问题,而被我注释掉的代码,他会将参数封装成数组,所以会一直报错,最终我反而一不小心帮忙优化了一下,之前由于公司的请求都是post请求,开发人员用postman也是用post进行测试,所以一直也没有人发现这个问题。
2.随着项目一步一步变得庞大,内存可能会不够,只需要修改一下jvm的参数即可。