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

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

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

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

 

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

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

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

刻板印象的解释:

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

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

使用它们的原因:

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

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

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

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