gpt4 book ai didi

java - 使用或不使用 Spring Beans 有什么区别?

转载 作者:搜寻专家 更新时间:2023-11-01 02:43:16 24 4
gpt4 key购买 nike

可能我会得到很多反对票,但是否使用 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...
}

}

因此,要注入(inject) ICurrency impl 注入(inject),我认为我可以通过两种方式完成:


方式一:没有Spring beans

public class CurrencyOperator {

private ICurrency currency ;
private CurrencyProcessor processor;

public void operateDefault(){
currency = new USDollarCurrency();
processor = new CurrencyProcessor(currency)
this.processor.doOperation();
}

}

其中 USDollarCurrency 是一个 ICurrency 接口(interface)实现


方式二:使用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 的好处,据我所知,这两种方式都注入(inject)了 CurrencyProcessor 需要的依赖性,正在改变的是我创建和使用对象的方式,我错了吗?所以具体来说,我的问题是:1、这种情况下使用Bean有什么好处?2. 为什么我应该使用 Spring 而不是像第一种方式那样手动完成?3. 说到性能,这几种情况哪个好?

最佳答案

假设您有 2 个 DAO 类,一个用于 Oracle,另一个用于 MySQL,并且这两个类都实现了一个 DAO 接口(interface)。您在 Spring 配置文件中将实现定义为 bean。在业务类中你有一个 DAO 类型的属性,而在 spring 配置文件中你选择真实类型 Oracle 或 MySQL 注入(inject)或使用 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 的类属性,你就改变了整个实现,而你的业务类没有任何改变!
祝你好运。

关于java - 使用或不使用 Spring Beans 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28747544/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com