0

春の MVC セットアップでのサービス クラスとリポジトリ クラスは、次のようなものです。

public class ObjectServiceImpl implements ObjectService {

@Autowired
Temp1Repo temp1Repo;
@Autowired
Temp2Repo temp2Repo;
...

}

public interface Temp1Repo extends CrudRepository<Temp1, Integer> {


}

public interface Temp2Repo extends CrudRepository<Temp2, Integer> {


}

今、サービス クラスで、Temp1 型のオブジェクトを取得しています。temp1Repo.save() を呼び出す必要があります。Temp2 のオブジェクトを取得した場合は、temp2Repo.save() などを呼び出す必要があります...

どうすればこれを達成できますか?

4

3 に答える 3

0

if ステートメントを使用するだけでかなり簡単に思えます。

if(object instanceof Temp1) {
    temp1Repo.save((Temp1) object);
} else if(object instanceof Temp2) {
    temp2Repo.save((Temp2) object);
}

それとも、より一般的な方法を探していますか?

于 2013-04-29T23:05:17.947 に答える
0

あなたが書いたコードに従って、注入が欠落している場合、Spring は起動時に例外を発生させます。

やりたいことは、質問内で省略した条件に応じて、動的なモジュールのロードです。

おそらく、XML 構成スタイルを使用し、条件付きスプリング コンテキストを作成して、使用する正しいものをロードする必要があります。

乾杯

于 2013-04-30T09:07:14.823 に答える
0

すべてのリポジトリを 1 つに再グループ化する必要があると思います。何かのようなもの

@SuppressWarnings("rawtypes")
public class ObjectServiceImpl  {

    @Autowired
    private CrudRepository[] repositories;
    private Map<Class<?>, CrudRepository> repositoryMap = new HashMap<Class<?>, CrudRepository>();


     @PostConstruct
     public void init() {
          for (CrudRepository r : repositories)
              repositoryMap.put(getType(r), r);
     }

    private Class<?> getType(CrudRepository repository) {

        Type[] types = repository.getClass().getGenericInterfaces();
        for (Type t : types) {
            if (t instanceof ParameterizedType)
                return (Class<?>) ((ParameterizedType) t).getActualTypeArguments()[0];
        }

        throw new IllegalStateException("Check repositories...");
    }

    public void save(Object entity) {
        repositoryMap.get(entity.getClass()).save(entity);
    }

    public <T> T get(Object id, Class<T> clazz) {
        return repositoryMap.get(clazz).findOne(id);
    }

    ....

}

直接使用することを検討しますEntityManagerが、とにかく役立つ可能性があります...

于 2013-04-29T23:25:39.757 に答える