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

Jua*_*ano 25 java spring annotations spring-mvc

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

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

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

<context:component-scan base-package="my.cool.controller"/>
Run Code Online (Sandbox Code Playgroud)

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

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

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

Jee*_*til 56

刻板印象的解释:

  • @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解析器.但是,正如你所说,它是启动时 - 它只发生一次.在中等机器上,即使注释也可以很快启动.

  • 请阅读以下网站中解释的文章:http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/aop.html和http://www.mkyong.com/spring3 /弹簧AOP-AspectJ的注释的示例/ (2认同)