多个业务模块中最常见的分页和info接口,分散在各个controller,个人想法可以利用IOC的beanFactory统一抽取公共的方案,使用接口来规范,多个业务不同实现.
1.制定接口
snipaste_20181109_154031.png2.多个实现
snipaste_20181109_154341.png snipaste_20181109_154041.png snipaste_20181109_154103.png3.controller动态获取service实现
实现的思路是不再自动注入bean的service,而且通过bean的id来获取实现,完成不同的业务,bean的id也可以两种不同的方式传入,以下是controller代码,可惜项目老大没有采用我的这种设计,service接口可以扩充query的bean来条件查询,这只是最基本的功能,接口是制定规范,很好的利用接口,一旦采用这种设计,后续增加新的模块,只需实现接口即可.
@RestController
@RequestMapping("/api")
public class PageController implements BeanFactoryAware {
private BeanFactory beanFactory;
@GetMapping("/common/page")
public Page getPage(Page page,String name) {
Page pageInfo = new Page();
//前端必传name
/*
* 不同的业务对应不同的name
* 款式
* 比如http://localhost:8080/api/common/page?name=style&pageNum=1&pageSize=5
* 订单
* http://localhost:8080/api/common/page?name=order&pageNum=1&pageSize=5
*/
PageService pageService = (PageService) beanFactory.getBean(name);
pageInfo= pageService.getPage(page);
return pageInfo;
}
@RequestMapping(value="/{name}/page",method = RequestMethod.GET)
public Page getPageByUri(Page page,@PathVariable("name") String name) {
Page pageInfo = new Page();
//这种用法,前端不用传name,但是改变url,占位符根据业务不同,写不同的值,个人觉得这种方式更好
/*
*
* 款式
* 比如http://localhost:8080/api/style/page?pageNum=1&pageSize=5
* 订单
* http://localhost:8080/api/order/page?pageNum=1&pageSize=5
*/
PageService pageService = (PageService) beanFactory.getBean(name);
pageInfo= pageService.getPage(page);
return pageInfo;
}
@GetMapping("/common/info")
public Page getInfo(String name,Long id) {
//前端必传name
/*
* 不同的业务对应不同的name
* 款式
* 比如http://localhost:8080/api/common/page?name=style&id=1
* 订单
* http://localhost:8080/api/common/page?name=order&id=1
*/
PageService pageService = (PageService) beanFactory.getBean(name);
Page info = pageService.getInfo(id);
return info;
}
@Override
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
this.beanFactory = beanFactory;
}
}
网友评论