我遵循的一般规则是事务边界在服务 bean 中标记,因此我不喜欢在服务之外修改休眠 POJO,因为我不知道是否有事务已经在运行。因此,从支持 bean 中,我将调用服务层传入参数,服务层需要构建休眠 pojo 并保存它、更新它等等。
另一种方法是让您的支持 bean 实现由服务层定义的接口,然后将支持 bean 传递给服务层。例如。
public interface UserInfoRequest {
public String getName();
}
@Service
public class SomeSpringService {
@Transactional(.....)
public void registerNewUser(UserInfoRequest request)
{
}
}
public class SomeBackingBean implements UserInfoRequest {
private SomeService someSpringService;
public void someMethodBoundToSJF()
{
this.someSpringService.registerNewUser(this);
}
}
关于你的最后一个问题,我不是 JSF 的粉丝,我认为 JSF 从根本上是有缺陷的,因为它是一个基于服务器组件的框架。所以我反对 JSF 的论点是反对基于服务器端组件的框架的通用论点。
基于服务器端组件的框架的主要缺陷是您无法控制组件将输出什么,这意味着您被组件的外观所困扰,如果您想要看起来不同的东西,您必须编写自己的组件,或者您有修改现有组件。Web 浏览器目前正在快速发展,添加了可以真正提高应用程序 UI 质量的新功能,但对您而言,您必须直接编写 HTML、CSS 和 JavaScript,而服务器端组件使这变得更加困难。
客户端组件架构就在这里,比在服务器端做组件要好得多。这是我推荐的堆栈。
客户端架构:
- jquery.js - 使所有浏览器看起来与 JavaScript 相同的基本库
- bone.js + underscore.js - 基于高级客户端组件的架构
- handlebars.js - 用于客户端模板
- Twitter bootstrap - 获得一套不错的 CSS 和小部件入门集
您使用 HTML、CSS 和 JavaScript 编写代码,这些代码组织为使用 AJAX 与服务器端模型对话的主干视图。您可以通过足够的结构完全控制客户端用户体验,从而真正制作出可重用的代码。
服务器端架构:
- 注解驱动的 Spring MVC、服务和 Dao(@Controller、@Service、@Repository)
- 按类型自动装配的 Spring 组件扫描 (@Autowired, @Inject)
- AspectJ 加载时间编织或编译时间编织
- 休眠
- 雄猫 7
- JSP 作为 Spring MVC 的视图技术(是的,它很笨拙,但您不会创建太多 jsp 页面,主要用于 usng <% @inculde > 指令
工具: - Spring Tool 套件 - JRebel(这样您就不必启动和停止服务器)它确实物有所值 - Tomcat 7