【问题标题】:Spring annotations @Repository and @ServiceSpring注解@Repository和@Service
【发布时间】:2014-10-12 13:32:23
【问题描述】:

使用@Repository@Service有什么好处?

不要告诉我有关组件扫描等的事情,我期待着一些额外的好处或功能,如果有的话。

如果我不使用它会怎样?我会错过什么?

【问题讨论】:

    标签: spring


    【解决方案1】:

    有几个原因:

    1. 使用更具体的注释更容易定位切入点。 不要低估它的用处!
    2. @Repository 注释带有一些附加功能:它会导致异常为 wrapped up as DataAccessExceptions
    3. @Service 注释 may gain additional semantics in the future 但还没有发生……

    【讨论】:

    • 是DataAccessException还是PersistenceException?
    • @veer7 DataAccessException,就像文档说的那样。为什么要问?
    【解决方案2】:

    @Repository 注释(在 Spring 2.0 中引入)和 @Service 注释(在 Spring 2.5 中引入)是 @Component 注释的特化。

    使用@Repository@Service 而不是@Component 的主要优点是它很容易编写一个AOP 切入点,例如,所有用@Repository 注释的类。

    此外,专门的注释有助于清楚地划分应用层(在标准的 3 层应用中)。

    【解决方案3】:

    我相信 Spring 在添加这些 Component 注释时考虑了两件事。

    1. 它们可用于指定跨用该子组件注释的所有对象的点切割。 (所有@Repository 或所有@Service 切入点)
    2. 我认为 Spring 还提到他们将在未来添加一些功能。 (我没有引用这个,我只是觉得我在某个地方读到过)

    【讨论】:

      【解决方案4】:

      如果您TDD,仔细设计(当然是测试)@Services 会很有用,因为它们将受益于您定义的所有@Autowired 组件的完全注入。

      例如,您可以将功能直接实现到 @Controller 中,但在这种情况下,测试会更加困难,并且您需要定义所有模拟元素(在 springframework 3.1 中非常容易,但仍然是“糟糕的设计”)。

      【讨论】:

        猜你喜欢
        • 2015-06-21
        • 2011-10-13
        • 1970-01-01
        • 2016-05-28
        • 2013-03-09
        • 2014-08-14
        • 1970-01-01
        • 2017-01-21
        相关资源
        最近更新 更多