【问题标题】:Advantages of using spring stereotypes?使用弹簧定型的优点?
【发布时间】:2013-04-09 17:17:33
【问题描述】:

我正在使用 spring-mvc 开发一个 Web 应用程序。

现在@Controller、@Service 和@Repository 构造型可用。

我发现@Controller 特别有用,特别是因为我正在使用

<context:component-scan base-package="my.cool.controller"/>

现在,关于@Service 和@Repository,到目前为止看起来像

  1. 如果使用正确的构造型注释类,则可以更好地处理异常,好的,我承认这是一个优势
  2. 我可以对服务和 DAO/存储库使用组件扫描,但是我不喜欢使用组件扫描的想法,因为它会减慢应用程序的启动时间,这对我来说是一个关键功能(即使只需 1 秒,我每周重新部署一次)

那么,除了更好的例外,还有其他优势吗?注释类对性能有影响吗?

【问题讨论】:

标签: java spring spring-mvc annotations


【解决方案1】:

刻板印象的解释:

  • @Service - 使用 @Service 注释所有服务类。该层知道工作单元。您所有的业务逻辑都将在服务类中。通常,服务层的方法都包含在事务中。您可以从服务方法进行多次 DAO 调用,如果一个事务失败,所有事务都应该回滚。
  • @Repository - 使用 @Repository 注释所有 DAO 类。您所有的数据库访问逻辑都应该在 DAO 类中。
  • @Component - 使用组件原型注释您的其他组件(例如 REST 资源类)。
  • @Autowired - 让 Spring 使用 @Autowired 注解将其他 bean 自动连接到您的类中。

@Component 是任何 Spring 管理的组件的通用原型。 @Repository@Service@Controller@Component 的特化,用于更具体的用例,例如,分别在持久层、服务层和表示层中。

使用它们的原因:

  • 使用@Repository 或@Service 而不是@Component 的主要优点是可以轻松编写一个AOP 切入点,例如,所有使用@Repository 注释的类。
  • 您不必在上下文 xml 文件中编写 bean 定义。而是注释类并通过自动装配来使用它们。
  • 专门的注释有助于清楚地划分应用层(在标准的 3 层应用中)。

现在,使用上下文 xml bean 和注释对性能的实际影响是相同的。组件扫描有点贵(当您扫描@Service 时,@Component)。注释通过反射“解析”,xml - 使用 xml 解析器。但是,正如您所说,这是启动时间 - 它只发生一次。在中等机器上,即使有注释,它也能很快启动。

【讨论】:

【解决方案2】:

组件扫描使您免于通过 xml 或 java 配置手动定义每个 bean。

有多种立体类型来定义服务层、数据层等层。同样基于不同的立体类型,如果你想做一些特定的事情,那么你可以这样做。

【讨论】:

  • 我知道组件扫描是做什么的,我也知道它是有代价的,使用xml对我来说没有问题。关于刻板印象和层次,很好,但是“如果你想做一些特定的事情,那么也可以基于不同的立体类型。”方法?有什么例子吗?
  • 我的意思是,如果需要,您可以定义更多立体类型来创建更多层。
  • 公平地说,这与说包或命名约定相比有什么优势(这里是魔鬼的拥护者,不要误会我的意思:)
猜你喜欢
  • 2015-01-11
  • 1970-01-01
  • 2019-05-25
  • 2015-07-15
  • 2012-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多