2016-04-28 16 views
0

私は3つのクラスを持っています。 CurrencyUtilNumberFormatterが必要です。 NumberFormatterは、CurrencyUtilが必要とするため、CurrencyUtilFactoryにのみ注入されます。春 - コンストラクタに渡されないフィールドがほとんどありません

CurrencyUtilに直接NumberFormatterを注入する方法はありますか?

ありがとうございます!

CurrencyUtil

public class CurrencyUtil { 
    private final LocalizationHelper localizationHelper; 
    private final NumberFormatter numberFormatter; 

    public CurrencyFormatter(final LocalizationHelper localizationHelper, final NumberFormatter numberFormatter) { 
     this.localizationHelper = localizationHelper; 
     this.numberFormatter = numberFormatter; 
    } 

    public String prettyPrint(final Currency amount) { 

    } 
} 

CurrencyUtilFactory

public class CurrencyUtilFactory { 
    @Autowired 
    private NumberFormatter numberFormatter; 

    public CurrencyUtil create() { 
     ... 
     final LocalizationHelper localizationHelper = ....; 
     return new CurrencyUtil(localizationHelper, numberFormatter)(); 
    } 

} 

て、NumberFormatter

@Component 
public class NumberFormatter {} 

PS:これに対する申し立ては次のとおりです。

答えて

2

以下のスニペットのようなものはあなたのために働くことができますか?この方法でCurrencyUtilを異なるamountの値で再利用することができます。 (調整後の質問に基づいて)

@Component 
public class CurrencyUtil { 

    private final NumberFormatter numberFormatter; 

    @Autowired 
    public CurrencyFormatter(NumberFormatter numberFormatter) { 
     this.numberFormatter = numberFormatter; 
    } 

    public String prettyPrint(Currency amount) { 
     // ... 
    } 
} 

更新

春はそれを知っているだけ豆をautowireすることができます。あなたのBean(またはそれらのうちのいくつか)がSpringで管理されていない場合は、独自に(たとえばコンストラクタを介して)それらをautowireする必要があります。解決策は次のようになります。返信用

@Configuration 
public class AppConfig { 

    @Autowired 
    private NumberFormatter numberFormatter; 

    @Autowired 
    private LocalizationHelper localizationHelper; 

    @Bean 
    public CurrencyUtil curencyUtil() { 
     return new CurrencyUtil(localizationHelper, numberFormatter); 
    } 

    // ... 
} 

それとも

@Component 
public class CurrencyUtil { 

    private LocalizationHelper helper; 

    private NumberFormatter numberFormatter; 

    @Autowired 
    public CurrencyFormatter(LocalizationHelper helper, NumberFormatter numberFormatter) { 
     this.helper = helper; 
     this.numberFormatter = numberFormatter; 
    } 

    public String prettyPrint(Currency amount) { 
     // ... 
    } 
} 
+0

ありがとう!私はこの例ではうまくやっていませんでした。私は今それを修正した。本質的に、NumberFactoryは、CurrencyUtilが必要とするため、CurrencyUtilFactoryにのみオートワイヤードされます。それを直接CurrencyUtilにAutowireする方法はありますか? – user544192

+0

SpringがマネージドBeanでない場合、どのように 'CurrencyUtil'に何を注入したいですか?たぶんJavaConfigが役立つかもしれません。更新された答えを見てください。 – pgiecek