相关疑难解决方法(0)

春天和贫血领域的模型

所以,我注意到我绝对倾向于模式化我的Spring/Hibernate堆栈对象,如下所示:

  • Foo控制器调用"FooService"
  • FooService调用FooRepository.getById()方法来获取一些Foos.
  • FooRepository进行一些Hibernate调用来加载Foo对象.
  • FooService与Foos进行一些互动.它可以使用相关的TransactionalFooService来处理需要在事务中一起完成的事情.
  • FooService要求FooRepository保存Foos.

这里的问题是Foos没有任何真正的逻辑.例如,如果每次Foo到期时都需要发送电子邮件,则不会调用Foo.expire().有一个对FooService.expireFoo(fooId)的调用.这有以下几种原因:

  • 从Foo获取其他服务和对象很烦人.它不是Spring bean,而是由Hibernate加载的.
  • 让Foo在事务上做几件事很烦人.
  • 很难确定Foo是否应该负责选择何时保存自己.如果你调用foo.setName(),foo应该保持更改吗?它应该等到你调用foo.save()吗?foo.save()应该调用FooRepository.save(this)吗?

因此,出于这些原因,我的Spring域对象往往是带有一些验证逻辑的美化结构.也许这没关系.也许Web服务可以作为程序代码.也许随着新功能的编写,创建以新方式处理相同旧对象的新服务是可以接受的.

但是我想摆脱这种设计,我想知道其他Spring使用的是什么呢?你是否用装载时编织等花哨的技巧来对抗它(我觉得不舒服)?你有其他的伎俩吗?你认为程序是好的吗?

oop spring

64
推荐指数
3
解决办法
4813
查看次数

以下实用程序类是否是线程安全的?

首先让我们看看实用程序类(大多数javadoc已被删除,只是示例):

public class ApplicationContextUtils {

    /**
     * The application context; care should be taken to ensure that 1) this
     * variable is assigned exactly once (in the
     * {@link #setContext(ApplicationContext)} method, 2) the context is never
     * reassigned to {@code null}, 3) access to the field is thread-safe (no race
     * conditions can occur)
     */
    private static ApplicationContext context = null;

    public static ApplicationContext getContext() {

    if (!isInitialized()) {
        throw new IllegalStateException(
            "Context not initialized yet! (Has the "
                + …
Run Code Online (Sandbox Code Playgroud)

java spring static multithreading thread-safety

3
推荐指数
1
解决办法
2149
查看次数

标签 统计

spring ×2

java ×1

multithreading ×1

oop ×1

static ×1

thread-safety ×1