使用弹簧定型的优点?

2022-09-01 18:22:30

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

现在,@Controller、@Service和@Repository的刻板印象已经可用。

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

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

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

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

那么,除了更好的例外之外,还有其他优势吗?批注类是否会对性能产生影响?


答案 1

刻板印象的解释:

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

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

使用它们的原因:

  • 与@Component相比,使用@Repository或@Service的主要优点是,很容易编写AOP切点,例如,针对所有用@Repository注释的类。
  • 您不必在上下文 xml 文件中编写定义。而是对类进行批注,并通过自动布线来使用这些类。bean
  • 专用注释有助于清楚地划分应用程序层(在标准的 3 层应用程序中)。

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


答案 2

组件扫描使您不必通过 xml 或 java 配置手动定义每个 Bean。

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


推荐