我正在使用spring-mvc开发一个Web应用程序。
现在可以使用@ Controller,@ Service和@Repository构造型。
我发现@Controller特别有用,特别是因为我正在使用
<context:component-scan base-package="my.cool.controller"/>
现在,关于@Service和@Repository,到目前为止看起来像
那么,除了更好的例外,还有其他任何优势吗?注释类是否会影响性能?
答案 0 :(得分:53)
刻板印象的解释:
@Service
- 使用@Service注释所有服务类。该层知道工作单元。您的所有业务逻辑都将位于服务类中。通常,服务层的方法包含在事务中。您可以从服务方法进行多个DAO调用,如果一个事务失败,则所有事务都应该回滚。@Repository
- 使用@Repository注释所有DAO类。所有数据库访问逻辑都应该在DAO类中。@Component
- 使用组件构造型注释您的其他组件(例如REST资源类)。@Autowired
- 让Spring使用@Autowired注释将其他bean自动连接到您的类中。 @Component
是任何Spring管理组件的通用构造型。对于更具体的用例,@Repository
,@Service
和@Controller
是@Component
的特化,例如,分别在持久性,服务和表示层中。
使用它们的原因:
bean
个定义。而是通过自动装配来注释类并使用它们。现在,使用上下文xml bean&amp;的实际性能影响注释是一样的。组件扫描有点贵(当您扫描@Service,@ Component时)。注释用反射“解析”,xml - 用xml解析器。但是,正如你所说,它是启动时 - 它只发生一次。在中等机器上,即使使用注释,它也会很快启动。
答案 1 :(得分:2)
组件扫描使您无法通过xml或java配置手动定义每个bean。
有多种立体声类型可用于定义服务层,数据层等层。如果您想要执行特定的操作,也可以根据不同的立体声类型进行定义。