[英]what is the difference between using or not Spring Beans?
可能我會得到很多downvotes,但是對於我來說,無論是否使用bean都是如此令人困惑。 讓我們假設這個例子
interface ICurrency {
String getSymbol();
}
public class CurrencyProcessor {
private ICurrency currency ;
public CurrencyProcessor(ICurrency currency) {
this.currency = currency;
}
public void doOperation(){
String symbol = currency.getSymbol();
System.out.println("Doing process with " + symbol + " currency");
// Some process...
}
}
因此,要注入ICurrency impl注入,我認為我可以通過兩種方式實現:
方式1:沒有春豆
public class CurrencyOperator {
private ICurrency currency ;
private CurrencyProcessor processor;
public void operateDefault(){
currency = new USDollarCurrency();
processor = new CurrencyProcessor(currency)
this.processor.doOperation();
}
}
其中USDollarCurrency是一個ICurrency接口實現
方式2:使用Spring bean
@ContextConfiguration(classes = CurrencyConfig.class)
public class CurrencyOperator {
@Autowired private ICurrency currency ;
@Autowired private CurrencyProcessor processor;
public void operateDefault(){
this.processor.doOperation();
}
}
@Configuration
public class CurrencyConfig {
@Bean
public CurrencyProcessor currencyProcessor() {
return new CurrencyProcessor(currency());
}
@Bean
public ICurrency currency() {
return new USDollarCurrency();
}
我真的不明白使用Spring的bean有什么好處。 我讀了一些東西,但我最發現的是關於使用DI的好處,據我所知,兩種方式都注入了CurrencyProcessor所需的依賴關系,改變的是我創建和使用objets的方式,我錯了嗎? 所以具體來說,我的問題是:1。在這種情況下使用Beans有什么好處? 2.為什么我要使用Spring而不是像第一種方式手動操作? 3.談論性能,哪種情況更好?
你沒有Spring的例子不依賴注入! 通過依賴注入,接口的實際實現是在代碼本身之外確定的,以減少耦合 !
您應該能夠需要另一個實現(例如,您可以從一個JMS客戶端切換到另一個...)。
為了回答你的上一個問題,使用Spring(性能稍差)性能更差,但更靈活。
編輯: Spring不是唯一可以用於DI的工具,但它是最受歡迎的,它包含很多功能。 請注意,許多Java標准(例如JPA)也使用DI。
假設你有一個用於Oracle的2個DAO類,用於MySQL的seconde,並且這兩個類都在實現DAO接口。 您可以在Spring配置文件中將實現定義為bean。 在業務類中,您有一個類型為DAO的屬性,而在spring配置文件中,您選擇要注入Oracle或MySQL的真實類型或使用spring注釋@Autowired
這減少了耦合,很容易從Oracle遷移到MySQL。
@Service
public class Business {
@Autowired
private Dao daoImpl;
//Business methods that invoks Dao methods
}
在Spring配置文件(XML文件)中,您使用以下命令:
<bean id="daoImpl" class="app.com.MySQLDaoImpl OR app.com.OracleDaoImpl"/>
只需更改bean的類屬性即可更改整個實現,而無需更改業務類!
祝好運。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.