使用spring原型的优势?


问题内容

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

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

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

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

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

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

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


问题答案:

刻板印象的解释:

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

@Component是任何Spring托管组件的通用构造型。@Repository@Service@Controller分别是@Component针对特定用例的专门化,例如分别在持久性,服务和表示层。

使用它们的原因:

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

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