编程语言
首页 > 编程语言> > java – 使用或不使用Spring Beans有什么区别?

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