既然JSF管理的bean不是bean容器的一部分,那么谁来管理它们呢,比如Spring bean。另外,托管bean如何在没有bean容器的情况下实现依赖注入?
如果没有bean管理的容器和Spring提供的其他功能,JSF将如何成为Spring的更好替代品?
JSF基本上是一个专注于视图层的MVC框架。当与Spring比较时,它可能相当于Spring MVC,但永远不能等同于整个Spring框架,后者具有更多的功能。
对于谁管理依赖注入的问题,自己的JSF框架用来做这件事,对我来说,作为一个例子,我使用Tomcat,它只是一个servlet容器,所以我使用JSF来完成这项工作(这意味着我只能注入其他托管bean,而不是服务或DAO)。
在其他情况下,对于JBoss或Glassfish等JavaEE服务器,服务器本身有一个嵌入式容器(其作用类似于Spring框架),因此您可以将注入委托给其CDI实现。
最后,您谈到JSF是Spring的替代品。正如我之前所说,这毫无意义。JSF是JavaEE规范的一部分,并且面向CDI注入使用。Spring MVC作为Spring框架的一部分,如果您使用Spring而不是JavaEE容器来管理应用程序,那么它可能是最佳选择,尽管您也可以使用JSF来代替它。
无论如何,记住总是有关于使用Spring或JavaEE的讨论。第一个版本是非标准的,提供了更快的支持和改进发布。另一方面,JavaEE遵循Java规范,具有Java规范的所有优点。
参见:
- Spring 3.0 vs Java EE 6.0 使用JSF作为Spring MVC的视图技术