2017-10-31 8 views
1

は、私はこのようなインタフェースの階層を持っている:Javaの春ブーツコンフィグ標準

public interface Shape { 
    //code 
} 

@Component 
public class Circle implements Shape { 
    //code 
} 

@Component 
public class Square implements Shape { 
    //code 
} 

私は春ブーツ豆の規則を使用して、これらを配線するための最良の方法を知ってほしいです。

解決方法1:

@Component(value = "Circle") 
public class Circle implements Shape { 
    //code 
} 

@Component(value = "Square") 
public class Square implements Shape { 
    //code 
} 

@Configuration 
public class ShapeConfig { 
    @Bean 
    Foo circleFoo(@Qualifiers("Circle") Shape shape) { 
     return new Foo(shape); 
    } 

    @Bean 
    Foo squareFoo(@Qualifiers("Square") Shape shape) { 
     return new Foo(shape); 
    } 
} 

解決方法2:

@Component 
public class Circle implements Shape { 
    //code 
} 

@Component 
public class Square implements Shape { 
    //code 
} 

@Configuration 
public class ShapeConfig { 
    @Bean 
    Foo circleFoo(Circle shape) { 
     return new Foo(shape); 
    } 

    @Bean 
    Foo squareFoo(Square shape) { 
     return new Foo(shape); 
    } 
} 

このケースで最高のJava /春の練習は何ですか?私は少し冗長であることを値と@Qualifierものを見つけたが、具体的な実装で配線が

それはアプリケーションの実装に依存
+0

興味深い質問...私は決定的な答えはありませんが、その場合は解決策2に行きます。私は可能な限り魔法の注釈を避ける方が好きです。あなたは予選で何も得られないので、些細なことを春に委譲するのは無意味なようです。 – SrThompson

答えて

1

眉をひそめている場合、私は思ったんだけど

はautowireの場合では、ばねは、まずしようautowire by byNameそして見つからない場合は型で、そしてコンストラクタで渡します(型によってはBeanが見つかりません)。

同じタイプと異なる名前を持つ複数のBeanを持たないようになるまでは、ソリューション2でうまくいきます(コンストラクタの代わりにautowire byNameを使用することもできます)が、2つ以上その後、我々は解決策1(予選)のために行くと同じタイプの豆 例:

@Configuration 
    public class Config { 
    @Bean(name = "circle1") 
    public Circle getCircle1(){ 
     Circle c = new Circle(); 
     c.setRadius(1.5); 
     return c; 
    } 

    @Bean(name = "circle2") 
    public Circle getCircle2(){ 
     Circle c = new Circle(); 
     c.setRadius(10); 
     return c; 
    } 
    } 

は、私がここに

@Component 
CirculeService { 
@Autowire @Qualifier("circle1") Circle circle1 
@Autowire @Qualifier("circle2") Circle circle2 
} 

私はautowireの修飾子のヘルプ(同じでautowireいるexapme上記のサービスがあるとしコンストラクタで)

関連する問題