2017-01-11 2 views
0

を注入し、簡単のためのクラスがどのように見えると仮定してみましょうそれはので、私が持っているこの機能 が必要私は抽象クラスに移動することを決めたいくつかの反復性の高いコードを持つ汎用サービス豆

@Service 
class MyService1 extends AbstractEntityService<MyEntity1, MyEntity1Repo> {} 

@Service 
class MyService2 extends AbstractEntityService<MyEntity2, MyEntity2Repo> {} 

... 

MyService1 ... MyService10本当に仕事をする春の自動検出のための型をセメントに比べて、他の何もしません。

私はそれらを定義したクラスを自分で定義することなく、直接

@Autowired 
private AbstractEntityService<MyEntity2, MyEntity2Repo> myEntity2Repo; 

を注入せずに逃げることができる場合、私は思ったんだけど。

+0

あなたはサブクラスをオートワイヤリングすることができるかもしれませんが、具体的なクラスが存在しなければなりません。春にあなたを作成する方法はないと思います。非常に大きなSpring/JPAプロジェクトをコーディングしているので、抽象クラスで何をしているのか不思議です。私はこれを必要としませんでしたか? –

答えて

0

いいえ、私はあなたができないと確信しています。

あなたができるのは、設定ファイルに自分でBeanを作成することです。

import javax.inject.Inject; 
import org.springframework.context.annotation.Bean; 

@org.springframework.context.annotation.Configuration 
public MyConfic { 

    @Inject MyEntity1Repo myEntity1Repo; 
    @Inject MyEntity2Repo myEntity2Repo; 

    @Bean(name="myEntity1Service") 
    AbstractEntityService<MyEntity1, MyEntity1Repo> myEntity2Service(){ 
     return new AbstractEntityService<> myEntity1Service(myEntity2Repo); 
    } 

    @Bean(name="myEntity2Service") 
    AbstractEntityService<MyEntity2, MyEntity2Repo> myEntity2Service(){ 
     return new AbstractEntityService<> myEntity2Service(myEntity2Repo); 
    } 

} 

少なくとも、エンティティごとに別個のサブクラスを作成する必要はありません。

マインドあなたは、今あなたが消去後ので、タイプによって注入を行うことはできませんあなたのmyEnity1ServiceあなたはmyEnity2Serviceと同じタイプがあります:AbstractEntityServiceを。

@Inject @Named("myEntity2Service") 
AbstractEntityService<MyEntity2, MyEntity2Repo> myEntity2Service; 
+0

ええ、これは私が考えることができる最高のものです(名前を保存することはできますが、デフォルトではメソッド名になります)。 –

+0

@KlausGroenbaek @KlausGroenbaek私は '@ '@ Inject'で名前を付けましたが、あなたが正しいと信じています。 – ArtB

+0

Springでは、ジェネリック型の情報がある限り、名前は必要ありません。だから、名前は実際にはBeanと注入ポイントの両方でオプションですが、J2EE環境ではうまくいきません。 –