java – 使用或不使用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.谈论性能,哪种情况更好?
解决方法:
假设你有一个用于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的类属性即可更改整个实现,而无需更改业务类!祝好运.
标签:java,dependency-injection,spring,spring-4 来源: https://codeday.me/bug/20190623/1275337.html