当前位置: 首页 > 知识库问答 >
问题:

用不用春豆有什么区别?

仲承福
2023-03-14

也许我会得到很多反对票,但对于我来说,是否使用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...
    }

}

所以,要注射ICRENCY impl注射剂,我想我可以用两种方法:

方式一:没有春豆

public class CurrencyOperator {

    private ICurrency currency ;
    private CurrencyProcessor processor;

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

}
@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所需的依赖关系,改变的是我创建和使用对象的方式,我错了吗?所以具体地说,我的问题是:1。在这种情况下使用bean有什么好处?2.为什么我要用Spring而不是像first Way那样手动操作?3.谈性能,这个案例哪个更好?

共有1个答案

甘祺
2023-03-14

假设您有两个DAO类一个用于Oracle,第二个用于MySQL,并且这两个类都实现了一个DAO接口。您将一个实现定义为Spring配置文件中的bean。在业务类中,您有一个类型为DAO的属性,而在spring配置文件中,您选择真正的类型wheather 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"/>
 类似资料:
  • 默认情况下,Spring创建的Bean是singleton。它们是线程安全的,因为它们是无状态的。当我们希望Spring创建有状态Bean时,我们需要为Bean定义使用原型范围。我们需要为他们解决线程安全问题。当原型Bean注入所有无状态Bean时,它们都会受到污染。所以,我无法想象我们可以在哪里使用原型范围。你能给出一些我们可以/需要使用springbean原型的典型场景吗?还有,我们如何避免对

  • 几乎每个Spring项目都使用spring-beans.xsd(更精确地说是指它)。然而,如果你看一下文件,http://www.springframework.org/schema/beans/spring-beans.xsd,你会发现它是3.2版本,并且没有属性“本地”的定义。 更有趣的是http://www.springframework.org/schema/beans/spring-be

  • 问题内容: 我已经在bean的“销毁方法”中放入了sysout语句。当我运行示例代码时,sysout没有得到输出。这是否意味着未调用销毁方法? 测试类别: 豆 配置文件: 问题答案: 您的示例无效,因为您没有关闭appcontext,只是让程序终止。 调用上下文,您将看到被调用的bean destroy-methods。

  • 那么现在我们叫bean什么?Bean是Foo类型的对象,引用“Foo”,但是Boo类是否被注释为服务,Foo被注释为存储库,也是Bean吗?我使用spring已经有一段时间了,但是这个基本的问题让我很难过,因为我不知道...

  • 问题内容: 更新:添加Maven依赖关系 * 更新:通过添加 Maven依赖关系 解决了该错误* 美好的一天。我有AplicationContext.xml的这一部分 Maven Dep春季和冬眠 但是,当我启动我的应用程序时,它告诉我这个错误 但是我正在使用hibernate4。这是什么魔术?=)我已经尝试过重新部署应用程序,但是结果是一样的 问题答案: 您已经错过了Spring-ORM模块:

  • 我知道这个问题听起来很幼稚,但我对web应用程序中bean的范围感到困惑。我知道,对于每个请求,容器都会生成一个新线程,类似地,对于spring web应用程序,每个请求都会生成一个新线程,那么为什么建议将我的控制器、服务定义为singleton,这些bean的范围不应该是prototype吗,因为每个请求(即线程)都有其自己的控制器实例和要使用的服务。 请开导我。