2016-04-28 60 views
0

我有三個類。 CurrencyUtil需要NumberFormatterNumberFormatter僅因爲CurrencyUtil需要而被注入CurrencyUtilFactory彈簧 - 注入幾個不通過構造函數的字段

有沒有辦法將NumberFormatter直接注入CurrencyUtil

謝謝!

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

能像下面的代碼段爲你工作?通過這種方式,您可以重複使用CurrencyUtilamount值。

@Component 
public class CurrencyUtil { 

    private final NumberFormatter numberFormatter; 

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

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

更新(基於調整後的問題)

Spring可以自動裝配,它僅知道豆子。如果你的bean(或者其中的一些)不是用Spring來管理的,你必須自己自動裝載它們(例如像你一樣通過構造函數)。該解決方案是:

@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只是自動裝入CurrencyUtilFactory,因爲CurrencyUtil需要它。有沒有辦法直接將它自動裝入到CurrencyUtil中? – user544192

+0

如果不是Spring託管bean,您希望如何向'CurrencyUtil'注入任何東西?也許JavaConfig可以提供幫助。看看更新的答案。 – pgiecek