从学习Java到工作已经一年多了,现在想起来,仍然是小小的脑袋里有大大的疑惑,记得学习培训的时候,讲到spring,大家都说不被controller调用的方法,只在server层内部的方法要用private,最近带别人也这么教被问为什么,我也想不明白为什么,如果都写public会有什么问题嘛?我怎么也想不到有什么问题,又不是静态方法,server层的抽象类又不写,实现类写了能暴露给谁用。
从学习Java到工作已经一年多了,现在想起来,仍然是小小的脑袋里有大大的疑惑,记得学习培训的时候,讲到spring,大家都说不被controller调用的方法,只在server层内部的方法要用private,最近带别人也这么教被问为什么,我也想不明白为什么,如果都写public会有什么问题嘛?我怎么也想不到有什么问题,又不是静态方法,server层的抽象类又不写,实现类写了能暴露给谁用。
这应该属于一种习惯了吧,类似于我就习惯将只在service内部调用的方法写成private。
讲道理,写成public并没有什么不对,毕竟在spring中不会使用具体的实现类来调用方法。但仔细考虑一下,如果你写成private,在维护时看到这个方法为private,就可以随意的改动。因为你知道这是一个只在内部调用的类,而不需要担心改了他之后影响到controller或者接口等等。
所以我也建议写成private,但还是看个人习惯。就像js一样,语法写法有很多种,加;号不加;号,lambda加()不加()。实际上都是一种习惯了吧
15 回答8.4k 阅读
8 回答6.3k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
1 回答2.1k 阅读✓ 已解决
这不是习惯,也不是什么潜移默化。
而是一种最佳实践,真正去理解封装,抽象的概念就很容易解释这种行为。
对于crud的常规操作,你举的例子可能不会有问题,大概率没人会去调用。因为理想情况下,大家都是这样从spring容器里面拿对象的
这个时候直接调用方法比如
ok没问题。
但是如果有人这样写呢?
这只是一个很浅显的例子,其实还是很多种常见下可能会出现问题,在设计一些较为复杂的功能时候,我们我们会对一个接口有多个实现类,每个实现类又可能实现了其他的多个接口,调用者需要根据场景来判断实现类,强转实现类类似
PasswordToken passwordToken=(PasswordToken)token;
这个时候接口根本不能约束调用者调用非法或者非安全方法。
楼上的答案会误导新手而且错误,不是看个人习惯。是必须考虑封装,考虑健壮性,尽量在满足功能和扩展性的前提下使用较小的作用域