使用spring原型的优势?
问题内容:
我正在使用spring-mvc开发一个Web应用程序。
现在,@Controller,@Service和@Repository构造型可用。
我发现@Controller特别有用,特别是因为我正在使用
<context:component-scan base-package="my.cool.controller"/>
现在,关于@Service和@Repository,到目前为止看起来像
- 如果使用正确的构造型对类进行注释,则可以更好地处理异常,这是我承认的优势
- 我可以将组件扫描用于服务和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解析器)。但是,正如您所说,这是启动时间-
它只发生一次。在中等大小的计算机上,即使带有注释,它也可以很快启动。