SpringBoot-RestController注解和@Service注解能作用在一个类上吗?

因为框架是公司自己封装的,为了减少开发量,减少手动写SQL。引用了QueryDSL框架,然后项目上抛弃了原有的三层结构,目前就一个service层,controller层的位置在框架里封装好了,业务开发只需要建一个service类,在service层中进行业务处理以及对数据库的CRUD操作,近期在代码中发现了一同事将@RestController和@Service注解都用在了service类上,我想使用的原因:一个有请求的接口可供前端直接调用,另一个时,被其他service注入调用,所以该同事就出现了这种用法。

可以加一起,但是不建议。querydsl,可以通过抽象。在Controller层同通过 lambda调用。也是很方便的。

	@PostMapping("/enabled")
	public Object setEnable(@RequestParam("id") HashSet<Integer> ids,
							@RequestParam("enabled") boolean enabled) {
		this.userService.apply(queryFactory -> queryFactory.update(QUser.user)
			.set(QUser.user.enabled, enabled)
			
			.set(QUser.user.lastModifiedDate, LocalDateTime.now())
			.where(QUser.user.id.in(ids).and(QUser.user.enabled.eq(!enabled)))
			.execute());
		return "ok";
	}

尽量还是把业务层抽离出来,它需要支持事务,以及事务方法之间的调用。事务加在Controller层,看起来也说得过去,但其实某些Controller逻辑并不需要事务的支持。并且Controller中执行,校验数据封装。。等比较复杂的逻辑,还会一直占用链接不提交事务。