1 回答

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超2個(gè)贊
問(wèn)題到底。在服務(wù)中使用那么多@Value 注釋是好方法嗎?/(使用 yml 文件存儲(chǔ) URL)。
這不是因?yàn)槟⑷肓颂?xì)粒度的屬性。這些應(yīng)該被封裝到一個(gè)特定的對(duì)象中:更具可讀性、可維護(hù)性和可測(cè)試性。
Spring 提供@ConfigurationProperties這樣做。
它必須注釋包含屬性的類。
你可以這樣做:
@Component
@ConfigurationProperties("external.library.url")
public class BookStoreUrlProperties {
private Empik empik = new Empik();
private Merlin merlin = new Merlin();
// getters/setters
public BookStoreUrlProperties() {
}
public static class Empik {
private String romances;
private String biographies;
private String crime;
private String guides;
private String fantasy;
// getters/setters
}
public static class Merlin {
private String romances;
private String biographies;
private String crime;
private String guides;
private String fantasy;
// getters/setters
}
}
然后像任何其他 bean 一樣注入這個(gè) bean:
@Autowired
BookStoreUrlProperties bookStoreUrlProperties;
并使用 getter 檢索 url,例如:
String RomanceUrl = bookStoreUrlProperties.getMerlin().getRomances();
我建議的另一種選擇是將屬性(merlin 和 empik)拆分為兩個(gè)屬性類。
關(guān)于服務(wù)類中的重復(fù),您可以通過(guò)提取參數(shù)重構(gòu)輕松地將它們分解出來(lái),因?yàn)槲ㄒ坏膮^(qū)別是 URL 值。
例如 :
public Map<Bookstore, List<Book>> get15BooksFromGuidesCategory() {
return get15BooksFrom(guidesCategoryEmpikURL, guidesCategoryMerlinURL)
}
public Map<Bookstore, List<Book>> get15BooksFromBiographiesCategory() {
return get15BooksFrom(biographiesCategoryEmpikURL, biographiesCategoryMerlinURL)
}
public Map<Bookstore, List<Book>> get15BooksFrom(String bookStoreEmpikURL, String bookStoreMerlinURL) {
bookstoreWith15CategorizedBooks.put(Bookstore.EMPIK, empikBookService
.get15BooksFromCategory(connect(bookStoreEmpikURL)));
bookstoreWith15CategorizedBooks.put(Bookstore.MERLIN, merlinFetchingBookService
.get15BooksFromCategory(connect(bookStoreMerlinURL)));
return bookstoreWith15CategorizedBooks;
}
添加回答
舉報(bào)