簡體   English   中英

使用或不使用Spring Beans有什么區別?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM