使用弹簧刻板印象的优点?

时间:2013-04-17 04:43:26

标签: java spring spring-mvc annotations

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

现在可以使用@ Controller,@ Service和@Repository构造型。

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

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

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

  1. 如果使用正确的构造型注释类,则可以更好地处理异常,好的,这是我认可的优势
  2. 我可以将组件扫描用于服务和DAO /存储库,但我不喜欢使用组件扫描,因为它会减慢应用程序的启动时间,这对我来说是一个关键功能(即使它只有1秒,我每周重新部署一次)
  3. 那么,除了更好的例外,还有其他任何优势吗?注释类是否会影响性能?

2 个答案:

答案 0 :(得分:53)

刻板印象的解释:

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

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

使用它们的原因:

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

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

答案 1 :(得分:2)

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

有多种立体声类型可用于定义服务层,数据层等层。如果您想要执行特定的操作,也可以根据不同的立体声类型进行定义。