我在网上阅读,@Service
用于服务层(业务逻辑),@Controller
用于API端点,而@Repository
用于持久层。
在我公司中,代码结构为:
Client -> Rest endpoint -> service -> DAO -> database
让我感到困惑的是,在DAO层中将其标注为
@Service
(实际上服务和DAO层也都被标注为@Service
)DAO是否有任何理由被注释为
@Service
?我不能问程序员,因为他正在休假。 最佳答案
启用@ Component,@ Repository,@ Service和@Controller批注后,启用自动组件扫描后,spring会自动将bean导入容器,因此您不必显式定义它们即可自动装配它们。
@零件
@Component注释将Java类标记为Bean,因此spring的组件扫描机制可以将其拾取并将其拉入应用程序上下文。要使用此批注,请将其应用于类,如下所示:
@资料库
尽管上面使用@Component足够好,但是您可以使用更合适的注释,该注释专门为DAO提供额外的好处,即@Repository注释。 @Repository批注是@Component批注的特化,具有相似的用途和功能。除了将DAO导入DI容器之外,它还使未经检查的异常(从DAO方法抛出)有资格转换为Spring DataAccessException。
@服务
@Service注释也是组件注释的一种特殊形式。目前,它不提供@Component注释之外的任何其他行为,但是最好在服务层类中使用@Service而不是@Component,因为它可以更好地指定意图。此外,将来工具支持和其他行为可能会依赖它。
@Controller
@Controller注释将一个类标记为Spring Web MVC控制器。它也是@Component专长,因此标有它的bean将自动导入DI容器中。将@Controller批注添加到类时,可以使用其他批注,即@RequestMapping;。将URL映射到类的实例方法。
在您的方案中,无论您使用@Service还是@Repository,对应用程序流都没有影响,应用程序可以正常工作,因为它们易于自动装配。但是标准做法是将@Repository用于dao类。