JSF+Spring+Hibernate的实例讲解(原创翻译)(14) </managed-property> <managed-property> <property-name>serviceLocator</property-name> <value>#{serviceLocatorBean}</value> </managed-property> </managed-bean>ProdUCtBean有一个请求的范围,这意味着如果ProdUCtBean在JSP页面内引用JSF执行为每一个请求创建ProdUCtBean实例的任务。被管理的ID属性与prodUCtId这个请求参数组装。JSF从请求得到参数,设置managed property。Integration between presentation and business-logic tiers: ServiceLocator抽象了查询服务的逻辑。在例子应用程序中,ServiceLocator被定义成一个一个接口。接口被JSF managed bean实现为ServiceLocatorBean,它从Spring application context查询服务:ServletContext context = FacesUtils.getServletContext();this.appContext = WebApplicationContextUtils.getRequiredWebApplicationContext(context);this.catalogService = (CatalogService)this.lookupService(CATALOG_SERVICE_BEAN_NAME);this.userService = (UserService)this.lookupService(USER_SERVICE_BEAN_NAME);ServiceLocator被定义为BaseBean中的一个属性。JSF managed bean容易连接ServiceLocator执行必须访问ServiceLocator的那些managed beans。使用了Inversion of control(IOC,控制反转)业务逻辑层定义业务对象,创建服务接口和实现,在Spring中配置这些对象组成了这一层的任务。Business objects: 因为Hibernate提供了持久化,ProdUCt和Category业务对象需要为它们包含的所有属性提供getter和setter方法。Business services:CatalogService接口定义了所有与目录管理有关的服务:
public interface CatalogService { public ProdUCt saveProdUCt(ProdUCt prodUCt) throws CatalogException;